Я читаю удивительную работу Эрика Эванса «Доменно-управляемый дизайн».Тем не менее, я не могу не чувствовать, что модель «слоев» придумана.Чтобы расширить это утверждение, кажется, что оно пытается объединить различные концепции в конкретную, аккуратную модель, в которой слои взаимодействуют друг с другом.Мне кажется, что модель слоев слишком упрощена, чтобы на самом деле понять, как работает (хорошее) программное обеспечение.
Для дальнейшего расширения: Эванс говорит:
"Разделите сложную программу на слои.Разрабатывайте дизайн внутри каждого слоя, который будет единым и зависит только от нижележащих слоев. Следуйте стандартным архитектурным схемам, чтобы обеспечить слабую связь со слоями выше. "
Возможно, я неправильно понимаю, что означает" зависит ", нонасколько я могу видеть, это может означать либо a) Класс X (в пользовательском интерфейсе, например) имеет ссылку на конкретный класс Y (в основном приложении), либо b) Класс X имеет ссылку на класс Y-ишобъект, предоставляющий услуги класса Y-ish (т. е. ссылка, хранящаяся в качестве интерфейса).
Если это означает (а), то это явно плохо, так как он побеждает повторное использование пользовательского интерфейса в качестве переднегоконец некоторому другому приложению, которое обеспечивает функциональность Y-ish.Но если это означает (б), то как пользовательский интерфейс больше зависит от приложения, чем приложение от пользовательского интерфейса?Оба отделены друг от друга настолько, насколько это возможно, пока они все еще разговаривают друг с другом.
Слойная модель зависимостей Эванса, идущая в одну сторону, кажется слишком опрятной.
Во-первых, не точнее ли сказать, что каждая область проекта предоставляет модуль, который в значительной степени является островком для себя, и что в идеале вся связь осуществляется через интерфейсы в рамках контракта / ответственностипарадигма?(то есть «зависимость только от нижних уровней» придумана).Аналогично, при взаимодействии уровня домена с базой данных - уровень домена отделен от базы данных (через DAO и т. Д.), Как база данных относится к уровню домена.Ни один из них не зависит от другого, оба могут быть заменены.
Во-вторых, идея концептуальной прямой линии (как в переходе от одного уровня к другому) является искусственной - разве нет сети взаимосвязи?но отдельные модули, в том числе внешние службы, коммунальные услуги и т. д., разветвляющиеся под разными углами?
Спасибо всем - надеемся, что ваши ответы могут прояснить мое понимание этого вопроса.Факт, который Эванс поясняет позже, что это тот случай (б), о котором он говорит: «Слои предназначены для слабой связи, с зависимостями проектирования только в одном направлении. Верхние слои могут напрямую использовать или управлять элементами нижних, вызывая их открытые интерфейсыудерживая ссылки на них ... Когда объект должен общаться вверх, нам нужен другой механизм ... такой как НАБЛЮДАТЕЛИ "
Это кажется мне полностью надуманным.Кажется, это путает зависимости дизайна только с потоком взаимодействия.UI нужна ссылка на приложение, потому что действия обычно инициируются пользователем!Для действий, которые инициируются приложением, например, какое-то внутреннее событие таймера, предупреждающее пользователя о чем-либо, приложению теперь нужна ссылка на пользовательский интерфейс, точно так же, как пользовательский интерфейс ранее нуждался в ссылке на приложение.В каком смысле один более «зависит от дизайна», чем другой?Чтобы поддержать мою точку зрения, для реализации OBSERVER, это приложение, которому понадобится список ссылок на компоненты пользовательского интерфейса.
Мне кажется, что единственная причина, по которой ссылки и дизайн SEEM переходят с верхнего уровня на нижний, заключается в том, что именно там обычно инициируются действия.Когда действие инициируется в приложении, ссылки должны идти в другом направлении.