Ответ 1
Чтобы ваше приложение и ваш разум в долгосрочной перспективе, НИКОГДА НЕ запускайте свое приложение DDD с проблемами, связанными с персистентностью (что-то дБ, что такое orm и т.д.) и ВСЕГДА (да, всегда) коснитесь db как последний этап разработки.
Модель вашего домена и фактически любая другая модель, кроме сохранения. Используйте шаблон репозитория, чтобы отключить приложение из Persistence. Определите интерфейс репо по мере необходимости приложением и не привязывайте его к методу доступа к db (то, почему вы выполняете персистентность позже, поэтому вы не получите соблазн связать ваше приложение с данными о сохранении).
Записывайте в операторы памяти для интерфейсов репо, это обычно означает простую оболочку над списком или словарем, поэтому ОЧЕНЬ быстро писать и, что более важно, тривиально изменить. Используйте те, которые действительно тестируют и разрабатывают приложение.
После того, как интерфейсы стабильны и приложение работает, пришло время написать реализацию персистентности, где вы можете использовать все, что пожелаете. В вашем случае EF и там оно появляется.
Теперь, это очень субъективно, нет правильного или неправильного пути, там, где вы предпочитаете делать что-то.
Лично у меня есть привычка использовать mementos, поэтому я получаю память от объекта домена, а затем вручную сопоставляю ее с объектами (микро) ORM. Причина, по которой я делаю это вручную, состоит в том, что мои объекты mementos содержат объекты значений. Если бы я использовал AutoMapper, мне было бы нужно его скрыть, и в сущности я бы написал больше кода, чем вручную.
Обновление (2015)
В эти дни я просто Json-объект и либо использую определенную модель чтения, либо храню ее непосредственно в модели чтения с столбцом Data
, который содержит сериализованный объект. Я использую Mementos только для очень конкретных случаев. </Обновление >
В зависимости от того, как выглядят объекты вашего домена и как выглядят объекты EF, вы можете уйти с использованием automapper для большей части отображения. Тем не менее, вам будет сложнее тестировать ваши репозитории.
Для вас это , как, вы можете найти способ, которым он подходит вашему стилю, и он легко ремонтируется, но НИКОГДА никогда не создавайте или не изменяйте объекты вашего домена, чтобы быть более совместимыми или соответствовать объектам ORM. Это не об изменении баз данных или ORM, а о том, что Домен (и остальная часть приложения) должным образом отделен от данных Persistence (которые ORM есть).
Так что сопротивляйтесь соблазну повторного использования вещей, которые являются деталями реализации других слоев. Причина, по которой приложение структурировано в слоях, состоит в том, что вы хотите развязать. Держите его таким образом.