Monday, February 12, 2007

Форум AgileDev.ru: Объектно-ориентированный анализ и пр�

Форум AgileDev.ru: Объектно-ориентированный анализ и пр�


Что есть доменная модель? [сообщение #1854] Sat, 16 July 2005 16:55 Переход к предыдущему сообщения
serega в настоящее время не в онлайне serega
Сообщений: 102
Зарегистрирован: June 2004
Географическое положение: Penza, Russia
Agile addicted
LIMB Developer

Данная тема возникла из почтовой переписки и мы решили переместить в форум. Вот первоначальные сообщения:

.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, а некие триггеры
или процедуры, которые приводят к изменениям в базе данных напрямую, а
не через бизнес-объекты. В любом случае, я просто не знаю, куда
относить такие классы. Возможно, это так называемые сервисы доменной
модели, а не части доменной модели.



Комментарии приветствуются!