Sto cercando di applicare DDD alla progettazione di un sistema di gestione delle versioni.
Entità di dominio
-
Project
: il progetto / prodotto / sistema. -
ProjectEnvironment
: gli ambienti (Test, Staging, Prod) esistenti per questo progetto. Ogni progetto ha i suoi ambienti definiti. -
ProjectVersion
: una versione specifica del progetto. Questo sarebbe associato a un pacchetto di distribuzione.
Limiteaggregato
DaquestovorreiProject
esserelaradiceaggregataeProjectEnvironment
eProjectVersion
essereaggregatidiProject
.NessunodiquestipuòesisteresenzaProject
.
Repository
AvreiquindisolounProjectRepository
cheforniràProjects
persistentecontuttigliaggregatiProjectVersion
eProjectEnvironment
(ediconseguenzaèpossibileaccedervisolotramiteilrispettivoProject
).
Domande
Dovrebbeesserciun
VersionRepository
eunEnvironmentRepository
?UnmetodoGetVersionById()
suProductRepository
sembrasbagliato.Mapoinonfornirebbepiùrepositorycheminaccianoillimiteaggregato?Dovrebbeesserciun"ProjectService" che gestirà e convaliderà gli aggregati usando i tre repository? Per salvaguardare da dati non validi, il codice cliente sarebbe solo in grado di fare riferimento al "ProjectService".