Здравствуйте, Blazkowicz, Вы писали:
B>Приложение строится на основме МОДЕЛИ предметной области.
Приложение строится на основе решаемых задач.
S>>Сваливание логики и данных в одну кучу приводит к прогибанию структуры данных под текущие требования. Поддерживать получившееся месиво — занятие крайне неблагодарное.
B>Месиво получается у тех кто бросается в крайности.
Рассмотрим пример.
Есть класс A, который содержит некоторые данные описывающие предметную область, и метод B, реализующий некоторую функцию.
Функция в свою очередь обращается к другим данным (когда не обращается — нам неинтересно). То есть в A должна быть ссылка на DAL, tesability идет лесом и получается каша.
Aggregate и выделение root_ов скажете вы, а я скажу что в разных сценариях могут разные объекты оказаться рутами. Lazy Load не спасет, так как заменяет явную ссылку на неявную, при этом порождая SELECT N+1 проблемы.
CQRS скажете вы, но это очень тяжелая концепция для вывода "списка заказов".
Единственное что спасает с небольшими затратами — это явная загрузка связанных сущностей, но тогда по причинам того же testability метод B надо вынести из сущности A, и грузить данные внутри B.
S>>1. Модель данных должна быть пассивной. Разумеется, это не означает что данные не могут автоматом проверять ограничения.
B>Существуют разные подходы и в разных ситуациях они имееют право на жизнь.
Не все, некоторые подходы, несмотря на то что они массово разрекламированы, приводят к огромным трудозатратам без наблюдаемого эффекта.
B>Выносить логику полностью построеную исключительно на свойсвах объекта за пределы этого объекта безсмысленно.
Почему же? Вынося логику у нас появляется возможность изменять и расширять методы БЛ, не трогая данные. Подсовывать динамически разные методы, переиспользовать модель данных или её части в других приложениях. Реализовывать БЛ на языке отличном, от языка реализации модели данных и Data Access.
S>>2. Данные должны быть отделены от бизнес-логики.
B>Данные не могут быть от неё отделены по ряду причин. Они без неё никому не нужны.
Данные могут понадобится другой БЛ, возможно той, о которой вы не знаете еще.