Данная тема возникла из почтовой переписки и мы решили переместить в форум. Вот первоначальные сообщения:
| .sid | Скажи, что вы понимаете под доменной моделью, некоторые понимают под этим "бизнес-логику" в целом, некоторые логическую схему базы данных, я же считаю, что доменная модель - это взимосвязь объектов домена. То есть доменная модель зависит от бизнес-логики и схемы БД, но ими не является. Насколько у нас схожие понятия?
|
Мой ответ:
| serega |
В моем понимании это набор классов, реализующих бизнес-логику и взаимосвязь с ними. По сути эти классы отражают реальные понятия, которые мы использует при обсуждении то или иной предметной области. Схема базы данных здесь точно ни к чему, так как в идеале доменные объекты ничего про persistence layer не ведают.
И еще, я не знаю до конца насчет тех DAO, которые при помощи запросов могут реализовывать некие бизнес-правила. Они являются частью бизнес-логики приложения, но наверное, не являются частью доменной модели, так как не представляют никого из реальных понятий предметной области (не представляют существительного, типа счет, банк, клиент).
|
Далее ответ .sid-а:
| .sid |
| serega |
> Схема базы данных здесь точно ни к чему, так как > в идеале доменные объекты ничего про persistence layer не ведают.
|
А мне кажется что это понятия связанные! Безусловно доменные объекты ничего не должны знать про БД. Но ведь, по сути, доменная модель и схема БД являются отображением предметной области на две технологии (реляционные БД и ООП). Плюс к этому доменная модель и схема БД очень похожи между собой. Хотя бы методами моделирования (N..M также реализуется через отдельный класс). Поэтому я считаю, эти понятия взаимосвязаны, пусть и не явно! И рассматривать их надо вместе. Ну а задача отделения доменной модели от pers. layer - это конечно святое!
| serega |
> И еще, я не знаю до конца насчет тех DAO, которые при помощи запросов > могут реализовывать некие бизнес-правила. Они являются частью > бизнес-логики приложения, но наверное, не являются частью доменной > модели, так как не представляют никого из реальных понятий > предметной области (не представляют существительного, типа счет, > банк, клиент).
|
Похоже тут у нас координально разные взгляды. Доменные объекты - реализуют бизнес-логику. Это их основное назначение. Подпадает ли DAO под доменную модель или бизнес-логику? Я считаю нет. Так как он, как вы сказали, используется только для view. Это просто инструмент получения данных из persistence layer. Если у вас DAO реализует какие-то правила бизнес-логики, то у меня вопрос. Зачем? Если есть доменные объекты.
|
И мой последний ответ:
| serega |
| .sid |
> А мне кажется что это понятия связанные! Безусловно доменные объекты > ничего не должны знать про БД. Но ведь, по сути, доменная модель и > схема БД являются отображением предметной области на две технологии > (реляционные БД и ООП). Плюс к этому доменная модель и схема БД очень похожи > между собой. Хотя бы методами моделирования (N..M также реализуется > через отдельный класс). Поэтому я считаю, эти понятия взаимосвязаны, > пусть и не явно! И рассматривать их надо вместе. Ну а задача отделения > доменной модели от pers. layer - это конечно святое!
|
У меня мнение другое - отражение предметной области в код - это доменные объекты, которые имеют минимальные зависимости от базы данных. Предметная область может быть очень сложной и затупанной, поэтому примешивать здесь базу данных излишне.
Отражение доменных классов на реляционную базу - это уже отдельная задача, с которой должен справляться ORM.
| .sid |
> Похоже тут у нас координально разные взгляды. Доменные объекты - > реализуют бизнес-логику. Это их основное назначение. Подпадает ли DAO > под доменную модель или бизнес-логику? Я считаю нет. Так как он, как > вы сказали, используется только для view. Это просто инструмент > получения данных из persistence layer. Если у вас DAO реализует > какие-то правила бизнес-логики, то у меня вопрос. Зачем? Если есть > доменные объекты.
|
На самом деле я имел ввиду не сами DAO, а некие триггеры или процедуры, которые приводят к изменениям в базе данных напрямую, а не через бизнес-объекты. В любом случае, я просто не знаю, куда относить такие классы. Возможно, это так называемые сервисы доменной модели, а не части доменной модели.
|
Комментарии приветствуются! |