У меня есть несколько проблем при попытке сначала выполнить DDD-разработку с помощью EF 4.2 (или EF 4.1). Я провел несколько исследований, но не нашел конкретных ответов на мои конкретные вопросы. Вот мои проблемы:
-
Домен не может знать о слое persistence, или, другими словами, домен полностью отделен от EF. Однако для сохранения данных в базе данных каждый объект должен быть присоединен или добавлен в контекст EF. Я знаю, что вы должны использовать фабрики для создания экземпляров совокупных корней, чтобы factory мог зарегистрировать созданный объект в контексте EF. Это, по-видимому, нарушает правила DDD, поскольку factory является частью домена, а не частью слоя сохранения. Как мне нужно создавать и регистрировать объекты, чтобы они сохранялись в базе данных при необходимости?
-
Должен ли агрегированный объект быть тем, кто создает дочерние объекты? Я имею в виду, если у меня есть
Organization
и чтоOrganization
имеет коллекцию объектовEmployee
, должен лиOrganization
иметь метод, напримерCreateEmployee
илиAddEmployee
? Если нет, то где создается объектEmployee
, имея в виду, что корневой узелOrganization
принадлежит каждомуEmployee
сущности. -
При первом использовании кода EF идентификаторы (в виде столбцов идентификации в базе данных) каждого объекта автоматически обрабатываются и, как правило, никогда не изменяются кодом пользователя. Поскольку DDD заявляет, что домен отделен от незнания персистентности, кажется, что выявление идентификаторов является странным делом в этом домене, потому что это означает, что домен должен обрабатывать назначение уникальных идентификаторов вновь созданным объектам. Должен ли я беспокоиться об экспонировании свойств идентификатора объектов?
Я понимаю, что это разновидности открытых вопросов дизайна, но я стараюсь изо всех сил придерживаться шаблонов проектирования DDD при использовании EF в качестве уровня персистентности.
Спасибо заранее!