Мразя да го кажа, но в среда на DDD отговорът ми би бил нито едното, нито другото.
В първия ви пример хранилището на ролите може да не знае потребителския домейн, което е добре, но това означава, че приложението трябва да знае, че за да получи ролята, трябва да изтегли идентификатор от потребителя и след това да направи запитване към друго хранилище. С други думи, приложението действа като картограф между потребител и роля.
Във втория пример хранилището на ролите вече трябва да знае за потребителския домейн. Не е страхотно, но от друга страна приложението вече не трябва да знае за roleId. Така че това е добре. Класически вид компромис между двата подхода.
Но и в двата случая приложението все още се нуждае от две хранилища, за да получи информацията си. Какво се случва, когато са необходими повече отношения? Броят на хранилищата може бързо да нарасне и нещата да станат бъркотия.
При проектиране, управлявано от домейн, трябва да се опитате да мислите от гледна точка на съвкупни корени (AR) и контекст на домейн. За вашия примерен контекст потребителят е AR и ролята става дете. Така че може да имате:
var user = _userFinder.GetById(1);
var customRole = user.CustomRole;
Това скрива повечето от подробностите за внедряването от вашето приложение и ви позволява да се съсредоточите върху това, което всъщност трябва да правят обектите на вашия домейн.
person
Cerad
schedule
25.08.2016