Question

Je pourrais utiliser un peu d'aide à comprendre mon modèle de domaine et à vous assurer que je m'approche correctement de la conception.

J'ai une racine agrégée appelée département. L'objet du département a plusieurs types de valeur enfant qui aident à définir la notion d'entreprise d'un «département». Dans mes utilisateurs de l'interface utilisateur, vous pouvez énumérer, créer, modifier et supprimer des objets de service.

J'ai une autre racine d'agrégation appelée projet. Un projet comporte plusieurs types de valeur pour enfants, mais a également une relation avec un ministère pour que chaque projet est «détenu» par un département. Les projets peuvent être créés, édités, supprimés, etc., etc., n'ont aucun impact sur le ministère alors que l'élimination d'un département supprime également les projets qu'elle possède.

Mon UI affichera une liste de projets basés sur les ministères que l'utilisateur actuel est autorisé à accéder. Ils peuvent être en mesure d'accéder à plus d'un département. Lorsqu'il est affiché comme un élément de liste ainsi que en détail, j'ai besoin d'afficher le logo du département avec le projet.

Ma première pensée était que le projet était une racine globale avec une simple propriété de département pouvant être utilisée pour "rechercher" le département. Mais maintenant je commence à penser que je n'ai vraiment qu'une seule racine agrégée: département.

Que pensez-vous?

mise à jour

Je ne sais pas si c'est la clé de la discussion ou de changer quelque chose que la pensée suivante m'a eu lieu après avoir lu les premières réponses.

Département semble avoir deux contextes:

  1. comme une entité autonome que Prend en charge la modification.
  2. comme un enfant d'un projet dans lequel cas est contenant des données en lecture seule et aucun comportement.

    Cela me fait penser que je devrais avoir deux "objets" dans mon modèle, une racine agrégée pour le cas # 1 et un type de valeur pour le cas # 2. Suis-je sur la bonne voie?

Était-ce utile?

La solution

Since the Project can't exist without a Department it's probably not an Aggregate Root. From your description it sounds like you only have one AR - the Department, which you use to manage the projects inside it.

If your behavior is mostly CRUD, i would not recommend building a full blown domain model for it since there are probably simpler approaches you can take.

UPDATE As you mention, you might have 2 bounded contexts here. One where the Department is an AR and the Projects are entities of this AR. In this context you would perform operations on your Departments. In a second BC your Project could be the AR and the Departments could be entities or VOs. This would allow you to work directly with projects.

I would also recommend going over this with your domain expert and see if these concepts fit well in your UL, or maybe search for some missing concept that can clarify your model. I would especially look for a concept that might link projects to departments.

Autres conseils

I think it's perfectly defensible to have both Project and Department be aggregate roots, since they are both managed independently.

That is, every Project and every Department have some kind of unique identifier, and while you can add Projects to Departments, Projects themselves are probably complicated enough (with their own lifecycles, their own child objects etc.) to warrant aggregate root status.

You just have to keep a reference to the Department in each Project.

Few simple questions to be answered:

1) can the department domain object live by its own without the Project domain object. - If yes, then the department is an aggregate.

2) Is the Project domain object can live by its own - If yes, then the Project is also an aggregate

3) Is Project has relationship with one Department - Then it should be part of the Project aggregate exposed as property Department

4) Is Department has relation ship with one or more Project objects - The the Project aggregate should be part of the Department aggregate object.

So, Using Department aggregate object you might need to access the list of Project(s) object and once you have the Project object you might need to access the Department object. It is a circular reference which is obsoletely fine.

It is a typical example of Employee has a manager and manager has a list of employees

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top