2013-03-08 2 views
5

Я хотел бы знать, как внедрять заводы в доменном дизайне. (примеры)DDD - Как внедрить фабрики

Где должны быть размещены интерфейсы и реализации фабрик? Нужно ли создавать интерфейсы для объектов Domain, создающих фабрики? Нужно ли создавать заводы для хранилищ, сервисов, ...

Я использую контейнеры для инъекций с зависимостями, как я могу объединить их с заводами?

Спасибо.

+2

imho этот вопрос неправомерно закрыт, так как разговоры о фабриках в DDD ограничивают его довольно хорошо по сравнению с разговорами о фабриках вообще. как имитировать их, это хороший вопрос, поскольку обычно существует три подхода: отдельные фабрики, позволяющие хранилищам действовать как фабрики или просто «новые» сущности домена. – jgauffin

+0

Однако, не смешивайте в вопросах о доменах вообще, так как это делает ваш вопрос неоднозначным. Сохраняйте его конкретным или создавайте несколько вопросов. – jgauffin

ответ

10

Заводы должны быть простыми классами, обычно статическими. Они также могут быть реализованы как статические методы для объекта или объекта значения, который они создают. Фабрики должны создавать объекты домена напрямую и только объекты домена. Более того, фабрики не должны быть связаны с инъекцией зависимостей, потому что объекты домена не должны иметь вложенных в них зависимостей.

Объекты домена не должны реализовывать интерфейсы - это ненужная абстракция.

С другой стороны, реализации служб и хранилищ имеют зависимости и должны быть созданы контейнером DI.

+2

Интерфейсы на самом деле являются ненужной абстракцией, если вы работаете самостоятельно, чтобы разработать одноразовый прототип (ожидаемая эволюция и, следовательно, никаких тестов). На сложных доменах с большой командой людей, работающих на разных уровнях, интерфейсы позволяют эффективно распараллеливать рефакторинг после изменений домена. Более того, без интерфейсов правильное модульное тестирование становится намного сложнее. –

+2

Для объектов домена, в частности, интерфейсы являются не только ненужной абстракцией, они являются вредной абстракцией. Интерфейсы для сервисов или хранилищ, с другой стороны, безусловно ценны. Тем не менее, объявления интерфейсов для тестирования в одиночку можно избежать с помощью хорошей насмешливой структуры. Как правило, я хочу подчеркнуть стоимость абстракции. Во-первых, вы узнаете значение абстракции, затем стоимость. – eulerfx

+0

Я согласен с тем, что в большинстве случаев типичным объектам домена не нужны интерфейсы, кроме тех, которые вы упомянули. Но, как всегда, это зависит от домена. Если в вашем домене есть общие объекты, которые могут быть взаимозаменяемы (стратегии), тогда это может быть полезно или даже необходимо. Но я думаю, это было бы исключением. –

Смежные вопросы