2010-09-30 1 views
3

Я уже некоторое время практикую DDD с 4-мя различными слоями: доменом, презентацией, приложением и инфраструктурой. Недавно я представил моего друга в концепцию DDD, и он подумал, что он ввел ненужный уровень сложности (в частности, ориентированные интерфейсы и IoC). Обычно, на этом этапе, я объясняю преимущества DDD - особенно, его модульность. Весь тяжелый подъем и под капотом находится в Инфраструктуре, и если бы я хотел полностью изменить базовый метод доступа к данным, я мог бы сделать это, только касаясь репозитория уровня инфраструктуры.DDD vs Архитектура N-Tier (3 уровня)

аргумент моего друга, что он мог бы построить трехуровневый приложение таким же образом:

  • Бизнес
  • данных
  • Презентация

Он будет создавать бизнес-модели (например, домен модели), а репозитории в слое данных возвращают эти бизнес-модели. Затем он назвал бы бизнес-уровень, называемый слоем данных. Я сказал ему, что проблема с этим подходом заключается в том, что он не поддается тестированию. Конечно, вы можете написать интеграционные тесты, но вы не можете писать настоящие модульные тесты. Можете ли вы увидеть какие-либо другие проблемы с его предложенным трехуровневым подходом (я знаю, что есть, потому что почему DDD существует иначе?).

EDIT: Он не использует IoC. Каждый слой в его примере зависит друг от друга.

+4

Домен-дизайн и многоуровневая архитектура действительно не имеют отношения к вашему спору (и, как я их понимаю, они ортогональны друг другу). Если вы очистите акронимы, что вы действительно не согласны? Кодирование интерфейсов и инъекции зависимостей? –

+0

@Jeff Sternal: Хммм ... хорошая точка. –

ответ

8

Я думаю, вы сравниваете яблоки и апельсины. Ничто в N-Tier не позволяет использовать интерфейсы & DI, чтобы их можно было легко протестировать. Аналогично, DDD может выполняться со статическими классами и жесткими зависимостями.

Кроме того, если он реализует бизнес-объекты и использует репозитории, это звучит так, как будто он делает DDD, и вы забираете немного больше, чем семантику.

Вы уверены, что проблема не просто с использованием DI/IoC или нет?

+0

Как можно легко протестировать устройство без использования IoC? Он может иметь интеграционные тесты, но как бы вы проводили модульное тестирование без интерфейсов/IoC/DI? –

+3

Я говорю, что DDD или N-Tier не подразумевают IoC или нет. Похоже, вы пытаетесь сфокусировать свой вопрос на DDD vs. N-Tier, но то, что ваш вопрос действительно задает, - это IoC/DI vs. no IoC/DI. fwiw, я бы на вашей стороне поддерживал IoC/DI. Я просто не думаю, что DDD или N-Tier имеют отношение вообще, так как либо можно делать с DI/IoC или без него. –

5

Я думаю, что вы смешиваете несколько методологий. DDD является Domain-Driven Developement и заключается в том, чтобы сделать бизнес-домен частью вашего кода. То, что вы описываете, больше напоминает архитектуру лука (link) по сравнению с «нормальным» 3-слойным подходом. Нет ничего плохого в использовании трехслойной архитектуры с DDD. DDD зависит от TDD (TestDriven Developement). Интерфейсы помогают с TDD, так как легче тестировать каждый класс изолированно. Если вы используете Injection Dependency (и IoC), это дополнительно смягчается.

Архитектура лука о создании домена (бизнес-правила a.k.a.) независимо от всего остального - то есть. это ядро ​​приложения со всем, что зависит от бизнес-объектов и правил, в то время как вещи, связанные с инфраструктурой, пользовательским интерфейсом и т. д., находятся во внешних слоях. Идея состоит в том, что чем ближе к «оболочке лука» модуль, тем проще обмен на новую реализацию.

Надеюсь, что это немного почистит - теперь с незначительным редактированием!

+0

Хммм ... Я очень хорошо знаком с Луковой архитектурой Джеффа Палермо, так как у моего проекта есть те отдельные слои внутри него, и я основывал его на его блоге.Тем не менее, все эти слои также существуют в проекте DDD (например, домен, приложение, презентация и инфраструктура). –

+0

Моя точка зрения заключалась в том, что, хотя структура профсоюза используется многими, которые также используют DDD - это не является обязательным условием для DDD. – Goblin

+0

Для дальнейшей разработки - для практического DDD - вам не нужен определенный набор слоев, и они не должны быть структурированы определенным образом. Однако все, что вы кодируете, должно моделировать домен, на который вы нацеливаетесь, включая бизнес-объекты, имеющие те же имена, что и их реальные копии. – Goblin