J'ai actuellement un référentiel pour à peu près chaque table dans la base de données et souhaiterait s'aligner davantage sur moi-même avec DDD par leur réduction à l'agrégation des racines.
Supposons que j'ai les tableaux suivants, User
et Phone
. Chaque utilisateur peut avoir un ou plusieurs téléphones. Sans la notion de racine d'agrégat je pourrais faire quelque chose comme ceci:
//assuming I have the userId in session for example and I want to update a phone number
List<Phone> phones = PhoneRepository.GetPhoneNumberByUserId(userId);
phones[0].Number = "911";
PhoneRepository.Update(phones[0]);
Le concept de l'ensemble des racines est plus facile à comprendre sur le papier que dans la pratique. Je n'aurai jamais les numéros de téléphone qui n'appartiennent pas à un Utilisateur, de sorte qu'il est logique d'en finir avec la PhoneRepository et incorporer téléphone méthodes liées à la UserRepository? En supposant que la réponse est oui, je vais réécrire le code précédent de l'échantillon.
Suis-je autorisé à avoir une méthode sur la UserRepository qui renvoie les numéros de téléphone? Ou faut-il toujours retourner une référence à un Utilisateur, puis traverser la relation par l'Utilisateur pour obtenir les numéros de téléphone:
List<Phone> phones = UserRepository.GetPhoneNumbers(userId);
// Or
User user = UserRepository.GetUserWithPhoneNumbers(userId); //this method will join to Phone
Indépendamment de la façon dont je acquérir les téléphones, en supposant que j'ai modifié l'un d'eux, comment puis-je mettre à jour? Ma compréhension est que les objets en vertu de la racine doit être mis à jour par le biais de la racine, ce qui me permettrait d'orienter vers le choix #1 ci-dessous. Bien que cela fonctionne parfaitement bien avec Entity Framework, cela semble extrêmement onu-descriptif, parce que la lecture du code, je n'ai aucune idée de ce que je suis réellement mise à jour, même si Entity Framework est de garder sur l'onglet objets modifiés dans le graphique.
UserRepository.Update(user);
// Or
UserRepository.UpdatePhone(phone);
Enfin, en supposant que j'ai plusieurs tables de recherche qui ne sont pas vraiment liée à quoi que ce soit, tels que l' CountryCodes
, ColorsCodes
, SomethingElseCodes
. Je pourrais les utiliser pour remplir des listes déroulantes ou pour toute autre raison. Êtes autonome de ces référentiels? Peuvent-ils être combinés dans une sorte de logique de regroupement/référentiel tel que CodesRepository
? Ou est-ce avec les meilleures pratiques.