Следует ли использовать DI на классах POCO при выполнении DDD? - PullRequest
1 голос
/ 03 марта 2010

Скажем, у меня есть хорошая модель предметной области, использующая (конструктор) DI, где это необходимо. Теперь я хочу сохранить эту модель, поэтому я начинаю добавлять инфраструктуру (Entity Framework) для этого. Что происходит сейчас, так это то, что среда персистентности должна иметь возможность инициализировать ваши типы, используя ваш контейнер IoC.

Может быть, это возможно, а может и нет. Во всяком случае, сейчас мне интересно; это вообще нормально использовать DI на ваших классах POCO? И если это так, как мне заставить Entity Framework использовать мой любимый контейнер IoC (в моем случае NInject) для создания моих классов.

Ответы [ 3 ]

5 голосов
/ 03 марта 2010

Более чем нормально использовать контейнер IoC для создания объектов, извлеченных из базы данных, я делаю это в своем проекте.

ORM не должен диктовать ваш дизайн. NHibernate может хорошо работать с IoC Container, я понятия не имею об EF, но подозреваю, что нет. Я бы поменял EF на NHibernate или вообще что-нибудь еще на твоем месте.

2 голосов
/ 03 марта 2010

Это один из религиозных аргументов в сообществе DDD: Должен ли я вводить услуги в мои организации ? Это действительно вопрос, на который вы должны ответить сами. Я не собираюсь рассказывать вам, что я думаю, потому что это очень контекстно - то, что я думаю, меняется в зависимости от нескольких факторов.

Я думаю, вам нужно потратить несколько часов и по-настоящему углубиться в архивы списка DDD , чтобы найти ответ, который будет работать для вас.

1 голос
/ 03 марта 2010

Если вы хотите использовать EF, рассмотрите EF4, где вы действительно можете использовать шаблоны POCO. Вы можете создавать репозитории вокруг своих классов POCO, и вы сможете использовать IoC, как вы используете его с другим ORM. Когда у вас есть POCO, все дело в многоуровневой архитектуре приложения.

Посмотрите на это прохождение:

http://blogs.msdn.com/adonet/pages/walkthrough-poco-template-for-the-entity-framework.aspx

...