Не хочу этого говорить, но в среде DDD я бы не ответил ни тем, ни другим.
В вашем первом примере репозиторий ролей может не знать о пользовательском домене, что хорошо, но это означает, что приложению необходимо знать, что для получения роли ему необходимо извлечь идентификатор из пользователя, а затем запросить другой репозиторий. Другими словами, приложение действует как сопоставитель между пользователем и ролью.
Во втором примере репозиторию ролей теперь необходимо знать о пользовательском домене. Не очень хорошо, но, с другой стороны, приложению больше не нужно знать о roleId. Так что это хорошо. Классический компромисс между двумя подходами.
Но в обоих случаях приложению по-прежнему нужны два репозитория для получения информации. Что происходит, когда необходимо больше отношений? Количество репозиториев может быстро вырасти, и все превратится в беспорядок.
При проектировании, ориентированном на предметную область, вы должны попытаться мыслить в терминах совокупных корней (AR) и контекстов предметной области. В вашем примере контекста пользователь является AR, а роль становится дочерней. Итак, у вас может быть:
var user = _userFinder.GetById(1);
var customRole = user.CustomRole;
Это скрывает большую часть деталей реализации от вашего приложения и позволяет вам сосредоточиться на том, что на самом деле нужно делать вашим доменным объектам.
person
Cerad
schedule
25.08.2016