Я уже некоторое время практикую DDD с 4 отдельными уровнями: домен, представление, приложение и инфраструктура. Недавно я познакомил моего друга с концепцией DDD, и он подумал, что она привносит ненужный уровень сложности (в частности, ориентированный на интерфейсы и IoC). Обычно на этом этапе я объясняю преимущества DDD - особенно его модульность. Вся тяжелая работа и скрытые вещи находятся в инфраструктуре, и если бы я хотел полностью изменить базовый метод доступа к данным, я мог бы сделать это, просто коснувшись репозитория уровня инфраструктуры.
Аргумент моего друга состоит в том, что он мог бы таким же образом построить трехуровневое приложение:
- Бизнес
- Данные
- Презентация
Он будет создавать бизнес-модели (например, модели предметной области), и репозитории на уровне данных возвращают эти бизнес-модели. Затем он будет вызывать бизнес-уровень, который называется уровнем данных. Я сказал ему, что проблема такого подхода в том, что его нельзя проверить. Конечно, вы можете писать интеграционные тесты, но не можете писать настоящие модульные тесты. Можете ли вы увидеть какие-либо другие проблемы с предложенным им трехуровневым подходом (я знаю, что они есть, потому что почему бы в противном случае существовал DDD?).
РЕДАКТИРОВАТЬ: он не использует IoC. Каждый слой в его примере зависит друг от друга.