|
|
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
Если следовать советам Крэга Лармана (и по всей видимости далеко не его одного), бизнес-классы не должны отвечать за сохранение себя в БД (т.е. обладать методами сохранения в БД и материализации из нее), так как это приводит к смешиванию их обязанностей с обязанностями технических служб. Одним из предлагаемых им методов является создание для каждого бизнес-класса специального класса-преобразователя, который и отвечает за материализацию/дематериализацию объектов, причем для повышения абстракции предлагается создать еще один класс, который будет содержать только операторы SQL, т.е. этот класс вызывает хранимую процедуру на сервере, получает набор записей из БД, передает их классу-преобразователю, который на их основе и синтезирует объект бизнес-логики. Причем каждый бизнес-класс также имеет свойства состояния (т.е. например New, OldClean, OldDirty в зависимости взят-ли экземпляр только-что из БД или синезирован совершенно новый, изменен-ли и т.п.) Как вообще правильно работать со всей этой кухней ? Сам Ларман причем в конце пишет, что вообще-то никто не мешает пойти другим путем, и все-таки унаследовать бизнес-классы от технического предка, если это "приводит к простому и прозрачному решению". Только вот не уточнаяет критерии прозрачности, что это, количество классов что-ли ? И каким способом тогда определять, много их уже или еще нет ? А что делать, если необходимо вывести dataGrid с табличными данными, скажем, деталей определенной машины ? Ну неужели получать коллекцию объектов деталей, а затем по-одному записывать в строчки грида ? Или тут идет на компромис, типа для грида делаем исключение, и засасываем записи напрямую не рассматривая их как набор объектров ? Может у кого-нибудь есть хорошие ссылки по теме, или даже электронные книжки, посвященные этой тематике ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2007, 20:37 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
Мне кажется ключевое слово для решения Ваших проблем - MVC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2007, 20:58 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
Если это Model View Controller - то что-то не понял, что именно вы хотели этим сказать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2007, 21:36 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
В MVC (Model-View-Controller) Model отвечает за взаимодействие с хранилищем данных и в Вашем случае реализует действия по синхронизации данных с БД - сохранение, изменение, удаление, выборку. При выборке извлеченные данные упаковываются в объект или массив объектов, который передается в контроллер или view, а уже во view содержимое выборки показывается в табличном виде. Или Вам не это было нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2007, 22:44 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
До тех пор, пока чисто объектные СУБД не получат очень широкого распространения и не составят реальную конкуренцию реляционным (что в ближайшее время маловероятно) – будут прикручивать всевозможные костыли для устранения противоречий между ОО парадигмой программирования и реляционной сущностью хранения и обработки данных. А вот размер и форма этого «костыля» уже подбирается исходя из конкретно решаемой задачи. Вот их то («костыли») и описывает в своей книге М.Фаулер «Архитектура корпоративных программных приложений» ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 04:20 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
StalkerSКак вообще правильно работать со всей этой кухней ? Да очень просто: т.н. "бизнес-класссы" существуют только в концептуальной модели-постановке задачи. В программной реализации их нет, есть только таблицы и процедуры обработки этих таблиц. Вот и все, и не надо ломится в открытую дверь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 10:13 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
2 Реалист и оптимист Смешно. Потом скажу почему. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 19:42 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
почему смешно? они же никогда не составят реальную конкуренцию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 22:20 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
U-gene 2 Реалист и оптимист Смешно. Потом скажу почему. :) Давайте посмеемся вместе. Только вначале ответим на такой вопрос – “ Какая причина породила появление нижеследующих типовых решений, которые описывает М.Фаулер в своей книге?” Архитектурные типовые решения источников данных. Шлюз таблицы данных (Table Data Gateway) Объект, выполняющий роль шлюза к базе данных Шлюз записи данных (Row Data Gateway) Объект, выполняющий роль шлюза к отдельной записи источника данных.Каждой строке таблицы базы данных соответствует свой экземпляр шлюза записи данных. Активная запись (Active Record) Объект, выполняющий роль оболочки для строки таблицы или представления базы данных. Он инкапсулирует доступ к базе данных и добавляет к данным логику домена. Преобразователь данных (Data Mapper) Слой преобразователей, который осуществляет передачу данных между объектами и базой данных, сохраняя последние независимыми друг от друга и от самого преобразователя Объектно-реляционные типовые решения, предназначенные для моделирования поведения Единица работы (Unit of Work) Содержит список объектов, охватываемых бизнес-транзакцией, координирует запись изменений в базу данных и разрешает вопросы параллелизма. Коллекция объектов (Indentity Map) Гарантирует, что каждый объект будет загружен из базы данных только один раз, сохраняя загруженный объект в специальной коллекции. При получении запроса просматривает коллекцию в поисках нужного объекта Загрузка по требованию (Lazy Load) Объект, который не содержит все требуемые данные, однако может загрузить их в случае необходимости. Объектно-реляционные типовые решения, предназначенные для моделирования структуры Поле идентификации (Identity Field) Сохраняет идентификатор записи базы данных для поддержки соответствия между объектом приложения и строкой базы данных. Отображения внешних ключей (Foreign Key Mapping) Отображает ассоциации между объектами на ссылки внешнего ключа между таблицами базы данных. Отображения с помощью таблицы ассоциаций (Association Table Mapping) Сохраняет множество ассоциаций в виде таблицы, содержащей внешние ключи таблиц, связанных ассоциациями Отображения зависимых объектов (Dependent Mapping) Передает некоторому классу полномочия по выполнению отображения для дочернего класса. Внедренное значение (Embedded Value) Отображает объект на несколько полей таблицы, соответствующей другому объекту Сериализованный крупный объект (Serialized LOB) Сохраняет граф объектов путем их сериализации в единый крупный объект(LargeObject – LOB) и помещает его в поле базы данных. Наследование с одной таблицей (Single Table Inheritance) Представляет иерархию наследования классов в виде одной таблицы, столбцы которой соответствуют всем полям классов, входящих в иерархию. Наследование с таблицами для каждого класса (Class Table Inheritance) Представляет иерархию наследования классов, используя по одной таблице для каждого класса. Наследование с таблицами для каждого конкретного класса (Concrete Table Inheritance) Представляет иерархию наследования классов, используя по одной таблице для каждого конкретного класса этой иерархии. Преобразователи наследования (Inheritance Mappers) Структура, предназначенная для организации преобразователей, которые работают с иерархиями наследования. Типовые решения объектно-реляционного отображения с использованием метаданных Отображение метаданных (Metadata Mapping ) Хранит описание деталей объектно-реляционного отображения в виде метаданных. Объект запроса (Metadata Mapping) Объект, представляющий запрос к базе данных Хранилище (Repository) Выступает в роли посредника между слоем домена и слоем отображения данных, представляя интерфейс в виде коллекции для доступа к объектам домена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 00:53 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
2 Реалист и оптимист Почему? Я не в курсе. Фиг ее знает, какие у этого "М.Фаулер" тараканы в голове (и, кстати, кто это?) У меня другие. 2 thingis я не про конкуренцию между текущими (не)комерческими системами, а про "противоречия между ОО парадигмой программирования и реляционной сущностью хранения и обработки данных". Если бы фраза была "между существующими ОО языками и РСУБД" я бы не прореагировал. А раз про сущности, то я и хихикаю. Это жыш мой пунктик :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 20:23 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
аааа противоречия между ооппарадигмой и реляционной сущностью - смешно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 21:00 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
U-gene Почему? Я не в курсе... Вопрос стоял – «какая причина?», а не - «почему?».Как говорится: правильно поставленный вопрос, это уже…. … и все же, если попытаться ответить на него. U-gene … какие у этого "М.Фаулер" тараканы в голове ( и, кстати, кто это ?)… “…и после всего этого, они еще мне запрещают ковыряться в носу!” Вовочка.(С) Вот некоторые из книг, в которых М.Фаулер выступает в роли автора или соавтора М. Фаулер, К. Скотт. UML: Основы. К.Бек, М.Фаулер Экстремальное программирование: планирование М.Фаулер "Рефакторинг" М. Фаулер. Архитектура корпорпоративных програмных приложений И Вы о них никогда даже не слышали? Ну тогда, м-да…, продолжаем смеяться дальше…. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 00:02 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
авторВопрос стоял – «какая причина?» например, М.Фаулер хочет стать знаменитым и иметь много денег. можно еще штук двадцать причин привести. постановка вопроса сомнительна и имеет натянутое отношение к программированию. обсуждение вопроса какие книжки читает мембер, тоже имеет натянутое отношение к программированию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 00:16 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
авторНаследование с одной таблицей (Single Table Inheritance) Представляет иерархию наследования классов в виде одной таблицы, столбцы которой соответствуют всем полям классов, входящих в иерархию. это по русски, вообще, написано? наследование представляет иерархию? кста, а глагол представляет что значит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 00:26 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
tchingizаааа противоречия между ооппарадигмой и реляционной сущностью - смешно. Приятно иметь дело с веселыми людьми…. Может быть так понятнее будет «…между ОО парадигмой программирования и реляционной сущностью (= способом ) хранения и обработки данных…» Ах, да … сейчас выяснится, что данные хранятся на жестком диске вовсе не в виде отношений (таблиц), а комбинациями участков различной намагниченности и на обработку процессору поступают как серии комбинаций различной величины напряжения, которые на более высоком уровне абстракции понимаются как 0 и 1. Вот смехота то какая…. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 00:45 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
на одном из уровней абстракции можно считать, что данные хранятся в виде таблиц. слово способ принято. парадигма, возможно, может противоречить способу. Хотя лично я не вижу как. В обсуждении Джо Селко долго перетирались сущности, реляционные сущности и реляционные ключи. http://sql.ru/forum/actualthread.aspx?tid=374405&pg=1 сорри, я не успеваю следить за полетом мысли всех. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 00:54 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
в книге Джо Селко среди всякого рода id-отизма про новообращенных sql-программистов, привыкших пользоваться магнитными лентами, попадаются занятные анекдоты. Например, такой автор Много лет назад в городе Рапид-Сити (Южная Дакота) состоялось совещание комитета по стандартам БД INCITS H2 (известного так же, как комитет ANSI X3H2). Двумя достопримечательностями совещания были гора Рашмор и Бьерн Страуструп (Bjarne Stroustrup). Г-н Страуструп сделал доклад про то, как в Bell Labs специально для нас разрабатывают язык C++ и объектно-ориентированное программирование, а потом мы перешли к вопросам. Один из вопросов заключался в том, как мы должны использовать объектно-ориентированное программирование в SQL. Он ответил, что фирма Bell Labs испытала четыре различных подхода к этой проблеме и - при всех ее талантах - пришла к выводу, что делать этого не следует. Объектно-ориентированный подход хорош для программирования, но смертелен для данных. http://www.sql.ru/articles/mssql/2006/080102DataDeclarationLanguage.shtml#23 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 01:26 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
tchingiz например, М.Фаулер хочет стать знаменитым и иметь много денег. Вполне нормальное желание, если человек не только хочет , но что-то реально полезное делает для этого. tchingiz это по русски, вообще, написано? кста, а глагол представляет что значит? У Вас проблемы с пониманием русского языка? tchingiz наследование представляет иерархию? Вам не знакомо такое понятие как иерархия наследования ? Странно. Хотя…, если Вы задаете подобный вопрос, то теперь понятно, почему Вы не смогли осилить смысл типового решения - «Наследование с одной таблицей (Single Table Inheritance)» Суть которого сводится к тому, что в одной таблице (по ширине, в столбцах) будут храниться поля как родительского класса, так и всех унаследованных от него. А поэтому для объектов одних классов в каких-то столбцах этой таблицы будут значения Null , так как у них просто не существуют эти поля, а для объектов других классов – другие столбцы будут с Null значениями, по той же причине. Ну и конечно, все они будут иметь общие столбцы, которые будут хранить значения для полей унаследованных от родительского класса. tchingiz слово способ принято. парадигма, возможно, может противоречить способу. Хотя лично я не вижу как. А Вы просто попробуйте создать, например класс «Квартира», который агрегирует объекты классов «Кухонные плита», «Ванная», «Смеситель», а потом значения полей объекта, как класса-агрегата, так и объектов классов входящих в этот агрегирующий класс отобразить (извлечь/изменить) на таблицы реляционной базы. А если еще ситуацию усилить тем, что объектов классов входящих в класс-агрегат, может быть больше чем 1, т.е. вырисовывается уже коллекция объектов? Что и сейчас ничего не видно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 02:40 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
авторВполне нормальное желание, если человек не только хочет, но что-то реально полезное делает для этого. желание нормальное. Действия нормальные- печатает книги и продает. (деньги штрих = деньги + товар. или както там) Ваш вопрос сомнителен: “Какая причина породила появление нижеследующих типовых решений, которые описывает М.Фаулер в своей книге?” ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 03:05 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
автор У Вас проблемы с пониманием русского языка? такого русского как в цитатах - да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 03:05 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
автор Много лет назад в городе Рапид-Сити (Южная Дакота) состоялось совещание комитета по стандартам БД INCITS H2 (известного так же, как комитет ANSI X3H2). Двумя достопримечательностями совещания были гора Рашмор и Бьерн Страуструп (Bjarne Stroustrup). Г-н Страуструп сделал доклад про то, как в Bell Labs специально для нас разрабатывают язык C++ и объектно-ориентированное программирование, а потом мы перешли к вопросам. Один из вопросов заключался в том, как мы должны использовать объектно-ориентированное программирование в SQL. Он ответил, что фирма Bell Labs испытала четыре различных подхода к этой проблеме и - при всех ее талантах - пришла к выводу, что делать этого не следует. Объектно-ориентированный подход хорош для программирования, но смертелен для данных. Программирования (при здравом уме) самого по себе, без обработки (манипулирования) данных(ми) существовать не может. Таковое оно никому не нужно. Вот я в самом начале и высказал мысль о том, что ОО парадигма программирования получила широкую популярность, а хранение и обработка данных, в подавляющем большинстве случаев, основана на реляционных моделях баз данных. И чтобы одно состыковать с другим приходится, выполнять «танцы шамана с бубном». ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 03:09 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
Реалист и оптимист tchingiz наследование представляет иерархию? Вам не знакомо такое понятие как иерархия наследования ? Странно. Хотя…, если Вы задаете подобный вопрос, то теперь понятно, почему Вы не смогли осилить смысл типового решения - «Наследование с одной таблицей (Single Table Inheritance)» Суть которого сводится к тому, что в одной таблице (по ширине, в столбцах) будут храниться поля как родительского класса, так и всех унаследованных от него. А поэтому для объектов одних классов в каких-то столбцах этой таблицы будут значения Null , так как у них просто не существуют эти поля, а для объектов других классов – другие столбцы будут с Null значениями, по той же причине. Ну и конечно, все они будут иметь общие столбцы, которые будут хранить значения для полей унаследованных от родительского класса. иерархия наследования мне знакома. мне было непонятно как наследование может представлять иерархию наследования? суть обьяснения Вашей сути понятна весьма смутно. авторчто в одной таблице (по ширине, в столбцах) будут храниться поля как родительского класса, так и всех унаследованных от него предположим кл1 наследник кл2. кл2 имеет одно поле1 class кл2 { int поле1; } по ширине в столбцах будут храниться поля как родительского класса, так и всех унаследованных Код: plaintext 1. 2. 3. 4. так это хранится обозначение поля - цепочка символов "поле1". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 03:15 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
Реалист и оптимист tchingiz слово способ принято. парадигма, возможно, может противоречить способу. Хотя лично я не вижу как. А Вы просто попробуйте создать, например класс «Квартира», который агрегирует объекты классов «Кухонные плита», «Ванная», «Смеситель», а потом значения полей объекта, как класса-агрегата, так и объектов классов входящих в этот агрегирующий класс отобразить (извлечь/изменить) на таблицы реляционной базы. А если еще ситуацию усилить тем, что объектов классов входящих в класс-агрегат, может быть больше чем 1, т.е. вырисовывается уже коллекция объектов? Что и сейчас ничего не видно? попробовал. в 1994 году. когда картами занимался. я уложил плиты, ванные, смесители, дороги, леса, могильники, речки, дома, трубы и электропроводку Кременчугского нефтеперерабатывающего завода в реляционную базу данных. Никаких проблем не обнаружил http://users.iptelecom.net.ua/~agp1/ru/kbd.html что значит слово агрегирует я не знаю правда. Это тоже русский язык? Может если я его осилю у меня появятся проблемы как у Крэга Лармана? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 03:20 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
Реалист и оптимист Программирования (при здравом уме) самого по себе, без обработки (манипулирования) данных(ми) существовать не может. Таковое оно никому не нужно. Вот я в самом начале и высказал мысль о том, что ОО парадигма программирования получила широкую популярность, а хранение и обработка данных, в подавляющем большинстве случаев, основана на реляционных моделях баз данных. И чтобы одно состыковать с другим приходится, выполнять «танцы шамана с бубном». мощно задвинули. Так вот я говорю, что хотя ооп может и получило широкую популярность, но танцев с бубном не надо что бы стыковать ооп парадигму и обработку и хранение данных, основанные на реляционной модели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 03:23 |
|
||
|
Как правильно сохранять объекты бизнес-логики в базе данных
|
|||
|---|---|---|---|
|
#18+
2 Реалист и оптимист Нет, в носу Вам никто ковыряться не запрешает. Только на всякий случай, о всех этих книжках и их афтфторах - вот у меня есть книжка (толстая и умная) тыщя девятсот семист лохматого года Т.В. Олле "Предложения Кодасил по Управлению БД" и там в конце КОДАСИЛ сравнивается с РМД. Выводы - процесс определения данных содержит ряд ограничений (прикинь, tchingiz, РМД "ограничили" с самог начала, а она, зараза упрямая, всё равно:)... а что будет когда до народа допрет, что они не её, а себя "ограничили"? :) ) - распространение ключей сверху вниз по глубокой струкутре (КМК это про внешние ключи) вызывает сомнение - релционный подход не позволяет определять сложные циклические структуры и ваще это голая теория, которой КОДАСИЛ в общем то соответсвует, зато предлагает гораздо больше возможностей и уже практически реализоан. Я не думаю, что люди моложе 35 это слово - КОДАСИЛ - вообще знают. Однако 30-40 лет назад, уверен, страсти так же кипели, куча книжек была написана очень авторитетными на то время людьми. Где они? - эти книжки , эти авторы? А я уже старый у мну уже крисис среднего возраста, мне о вечном думать пора В общем , я стал критически к этому многообразию относится - подойду в книжном магАзине к полке, возьму том, полистаю - всё те же яйца, только в профиль... А уж когда слышу об ограничениях, противоречийх и импедансах (некоторые аффтары цинично усиливают до "импеданс несоответсвия"... КМК маслят масло), мне и смешно и грустно. Модератор: )) несмотря на грусть, просьба писать слово "авторы" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 08:51 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=34642617&tid=1345957]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 407ms |

| 0 / 0 |
