powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как правильно сохранять объекты бизнес-логики в базе данных
56 сообщений из 56, показаны все 3 страниц
Как правильно сохранять объекты бизнес-логики в базе данных
    #34636313
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если следовать советам Крэга Лармана (и по всей видимости далеко не его одного), бизнес-классы не должны отвечать за сохранение себя в БД (т.е. обладать методами сохранения в БД и материализации из нее), так как это приводит к смешиванию их обязанностей с обязанностями технических служб.
Одним из предлагаемых им методов является создание для каждого бизнес-класса специального класса-преобразователя, который и отвечает за материализацию/дематериализацию объектов, причем для повышения абстракции предлагается создать еще один класс, который будет содержать только операторы SQL, т.е. этот класс вызывает хранимую процедуру на сервере, получает набор записей из БД, передает их классу-преобразователю, который на их основе и синтезирует объект бизнес-логики.
Причем каждый бизнес-класс также имеет свойства состояния (т.е. например New, OldClean, OldDirty в зависимости взят-ли экземпляр только-что из БД или синезирован совершенно новый, изменен-ли и т.п.)

Как вообще правильно работать со всей этой кухней ? Сам Ларман причем в конце пишет, что вообще-то никто не мешает пойти другим путем, и все-таки унаследовать бизнес-классы от технического предка, если это "приводит к простому и прозрачному решению". Только вот не уточнаяет критерии прозрачности, что это, количество классов что-ли ? И каким способом тогда определять, много их уже или еще нет ?
А что делать, если необходимо вывести dataGrid с табличными данными, скажем, деталей определенной машины ? Ну неужели получать коллекцию объектов деталей, а затем по-одному записывать в строчки грида ? Или тут идет на компромис, типа для грида делаем исключение, и засасываем записи напрямую не рассматривая их как набор объектров ?

Может у кого-нибудь есть хорошие ссылки по теме, или даже электронные книжки, посвященные этой тематике ?
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34636346
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется ключевое слово для решения Ваших проблем - MVC
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34636387
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это Model View Controller - то что-то не понял, что именно вы хотели этим сказать
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34636449
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В MVC (Model-View-Controller) Model отвечает за взаимодействие с хранилищем данных и в Вашем случае реализует действия по синхронизации данных с БД - сохранение, изменение, удаление, выборку. При выборке извлеченные данные упаковываются в объект или массив объектов, который передается в контроллер или view, а уже во view содержимое выборки показывается в табличном виде. Или Вам не это было нужно?
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34636579
До тех пор, пока чисто объектные СУБД не получат очень широкого распространения и не составят реальную конкуренцию реляционным (что в ближайшее время маловероятно) – будут прикручивать всевозможные костыли для устранения противоречий между ОО парадигмой программирования и реляционной сущностью хранения и обработки данных. А вот размер и форма этого «костыля» уже подбирается исходя из конкретно решаемой задачи. Вот их то («костыли») и описывает в своей книге М.Фаулер «Архитектура корпоративных программных приложений»
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34636890
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSКак вообще правильно работать со всей этой кухней ?
Да очень просто: т.н. "бизнес-класссы" существуют только в концептуальной модели-постановке задачи. В программной реализации их нет, есть только таблицы и процедуры обработки этих таблиц. Вот и все, и не надо ломится в открытую дверь.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34639310
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Реалист и оптимист Смешно. Потом скажу почему. :)
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34639465
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему смешно?
они же никогда не составят реальную конкуренцию
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34639566
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)
Выступает в роли посредника между слоем домена и слоем отображения данных, представляя интерфейс в виде коллекции для доступа к объектам домена.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642391
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Реалист и оптимист Почему? Я не в курсе. Фиг ее знает, какие у этого "М.Фаулер" тараканы в голове (и, кстати, кто это?) У меня другие.

2 thingis я не про конкуренцию между текущими (не)комерческими системами, а про "противоречия между ОО парадигмой программирования и реляционной сущностью хранения и обработки данных". Если бы фраза была "между существующими ОО языками и РСУБД" я бы не прореагировал. А раз про сущности, то я и хихикаю. Это жыш мой пунктик :)
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642428
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аааа
противоречия между ооппарадигмой и реляционной сущностью - смешно.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642580
U-gene
Почему? Я не в курсе...

Вопрос стоял – «какая причина?», а не - «почему?».Как говорится: правильно поставленный вопрос, это уже….
… и все же, если попытаться ответить на него.

U-gene
… какие у этого "М.Фаулер" тараканы в голове ( и, кстати, кто это ?)…

“…и после всего этого, они еще мне запрещают ковыряться в носу!” Вовочка.(С)

Вот некоторые из книг, в которых М.Фаулер выступает в роли автора или соавтора
М. Фаулер, К. Скотт. UML: Основы.
К.Бек, М.Фаулер Экстремальное программирование: планирование
М.Фаулер "Рефакторинг"
М. Фаулер. Архитектура корпорпоративных програмных приложений

И Вы о них никогда даже не слышали? Ну тогда, м-да…, продолжаем смеяться дальше….
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642591
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВопрос стоял – «какая причина?»
например,
М.Фаулер хочет стать знаменитым и иметь много денег.
можно еще штук двадцать причин привести.

постановка вопроса сомнительна и имеет натянутое отношение к программированию.

обсуждение вопроса какие книжки читает мембер, тоже имеет натянутое отношение к программированию.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642595
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНаследование с одной таблицей (Single Table Inheritance)
Представляет иерархию наследования классов в виде одной таблицы, столбцы которой соответствуют всем полям классов, входящих в иерархию.

это по русски, вообще, написано?

наследование представляет иерархию?

кста, а глагол представляет что значит?
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642604
tchingizаааа
противоречия между ооппарадигмой и реляционной сущностью - смешно.
Приятно иметь дело с веселыми людьми….
Может быть так понятнее будет
«…между ОО парадигмой программирования и реляционной сущностью (= способом ) хранения и обработки данных…»
Ах, да … сейчас выяснится, что данные хранятся на жестком диске вовсе не в виде отношений (таблиц), а комбинациями участков различной намагниченности и на обработку процессору поступают как серии комбинаций различной величины напряжения, которые на более высоком уровне абстракции понимаются как 0 и 1.
Вот смехота то какая….
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642611
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на одном из уровней абстракции можно считать, что данные хранятся в виде таблиц.

слово способ принято. парадигма, возможно, может противоречить способу. Хотя лично я не вижу как.

В обсуждении Джо Селко долго перетирались сущности, реляционные сущности и реляционные ключи.
http://sql.ru/forum/actualthread.aspx?tid=374405&pg=1

сорри, я не успеваю следить за полетом мысли всех.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642617
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в книге Джо Селко среди всякого рода id-отизма про новообращенных sql-программистов, привыкших пользоваться магнитными лентами, попадаются занятные анекдоты.
Например, такой
автор
Много лет назад в городе Рапид-Сити (Южная Дакота) состоялось совещание комитета по стандартам БД INCITS H2 (известного так же, как комитет ANSI X3H2). Двумя достопримечательностями совещания были гора Рашмор и Бьерн Страуструп (Bjarne Stroustrup). Г-н Страуструп сделал доклад про то, как в Bell Labs специально для нас разрабатывают язык C++ и объектно-ориентированное программирование, а потом мы перешли к вопросам.
Один из вопросов заключался в том, как мы должны использовать объектно-ориентированное программирование в SQL. Он ответил, что фирма Bell Labs испытала четыре различных подхода к этой проблеме и - при всех ее талантах - пришла к выводу, что делать этого не следует. Объектно-ориентированный подход хорош для программирования, но смертелен для данных.



http://www.sql.ru/articles/mssql/2006/080102DataDeclarationLanguage.shtml#23
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642633
tchingiz
например,
М.Фаулер хочет стать знаменитым и иметь много денег.

Вполне нормальное желание, если человек не только хочет , но что-то реально полезное делает для этого.

tchingiz
это по русски, вообще, написано?
кста, а глагол представляет что значит?

У Вас проблемы с пониманием русского языка?

tchingiz
наследование представляет иерархию?

Вам не знакомо такое понятие как иерархия наследования ? Странно.
Хотя…, если Вы задаете подобный вопрос, то теперь понятно, почему Вы не смогли осилить смысл типового решения - «Наследование с одной таблицей (Single Table Inheritance)»
Суть которого сводится к тому, что в одной таблице (по ширине, в столбцах) будут храниться поля как родительского класса, так и всех унаследованных от него. А поэтому для объектов одних классов в каких-то столбцах этой таблицы будут значения Null , так как у них просто не существуют эти поля, а для объектов других классов – другие столбцы будут с Null значениями, по той же причине. Ну и конечно, все они будут иметь общие столбцы, которые будут хранить значения для полей унаследованных от родительского класса.

tchingiz
слово способ принято. парадигма, возможно, может противоречить способу. Хотя лично я не вижу как.

А Вы просто попробуйте создать, например класс «Квартира», который агрегирует объекты классов «Кухонные плита», «Ванная», «Смеситель», а потом значения полей объекта, как класса-агрегата, так и объектов классов входящих в этот агрегирующий класс отобразить (извлечь/изменить) на таблицы реляционной базы.
А если еще ситуацию усилить тем, что объектов классов входящих в класс-агрегат, может быть больше чем 1, т.е. вырисовывается уже коллекция объектов?
Что и сейчас ничего не видно?
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642638
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВполне нормальное желание, если человек не только хочет, но что-то реально полезное делает для этого.
желание нормальное.
Действия нормальные- печатает книги и продает. (деньги штрих = деньги + товар. или както там)

Ваш вопрос сомнителен:
“Какая причина породила появление нижеследующих типовых решений, которые описывает М.Фаулер в своей книге?”
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642639
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
У Вас проблемы с пониманием русского языка?
такого русского как в цитатах - да.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642640
автор
Много лет назад в городе Рапид-Сити (Южная Дакота) состоялось совещание комитета по стандартам БД INCITS H2 (известного так же, как комитет ANSI X3H2). Двумя достопримечательностями совещания были гора Рашмор и Бьерн Страуструп (Bjarne Stroustrup). Г-н Страуструп сделал доклад про то, как в Bell Labs специально для нас разрабатывают язык C++ и объектно-ориентированное программирование, а потом мы перешли к вопросам.
Один из вопросов заключался в том, как мы должны использовать объектно-ориентированное программирование в SQL. Он ответил, что фирма Bell Labs испытала четыре различных подхода к этой проблеме и - при всех ее талантах - пришла к выводу, что делать этого не следует. Объектно-ориентированный подход хорош для программирования, но смертелен для данных.

Программирования (при здравом уме) самого по себе, без обработки (манипулирования) данных(ми) существовать не может. Таковое оно никому не нужно.
Вот я в самом начале и высказал мысль о том, что ОО парадигма программирования получила широкую популярность, а хранение и обработка данных, в подавляющем большинстве случаев, основана на реляционных моделях баз данных. И чтобы одно состыковать с другим приходится, выполнять «танцы шамана с бубном».
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642641
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реалист и оптимист
tchingiz
наследование представляет иерархию?

Вам не знакомо такое понятие как иерархия наследования ? Странно.
Хотя…, если Вы задаете подобный вопрос, то теперь понятно, почему Вы не смогли осилить смысл типового решения - «Наследование с одной таблицей (Single Table Inheritance)»
Суть которого сводится к тому, что в одной таблице (по ширине, в столбцах) будут храниться поля как родительского класса, так и всех унаследованных от него. А поэтому для объектов одних классов в каких-то столбцах этой таблицы будут значения Null , так как у них просто не существуют эти поля, а для объектов других классов – другие столбцы будут с Null значениями, по той же причине. Ну и конечно, все они будут иметь общие столбцы, которые будут хранить значения для полей унаследованных от родительского класса.



иерархия наследования мне знакома.
мне было непонятно как наследование может представлять иерархию наследования?
суть обьяснения Вашей сути понятна весьма смутно.

авторчто в одной таблице (по ширине, в столбцах) будут храниться поля как родительского
класса, так и всех унаследованных от него
предположим
кл1 наследник кл2.
кл2 имеет одно поле1
class кл2 {
int поле1;
}


по ширине в столбцах будут храниться поля как родительского класса, так и всех унаследованных

Код: plaintext
1.
2.
3.
4.
  таблица
-------------------------------
кл1.поле1 | кл2. поле1

это вот так?
так это хранится обозначение поля - цепочка символов "поле1".
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642642
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реалист и оптимист
tchingiz
слово способ принято. парадигма, возможно, может противоречить способу. Хотя лично я не вижу как.

А Вы просто попробуйте создать, например класс «Квартира», который агрегирует объекты классов «Кухонные плита», «Ванная», «Смеситель», а потом значения полей объекта, как класса-агрегата, так и объектов классов входящих в этот агрегирующий класс отобразить (извлечь/изменить) на таблицы реляционной базы.
А если еще ситуацию усилить тем, что объектов классов входящих в класс-агрегат, может быть больше чем 1, т.е. вырисовывается уже коллекция объектов?
Что и сейчас ничего не видно?
попробовал.
в 1994 году. когда картами занимался.
я уложил плиты, ванные, смесители, дороги, леса, могильники, речки, дома, трубы и электропроводку
Кременчугского нефтеперерабатывающего завода в реляционную базу данных.
Никаких проблем не обнаружил
http://users.iptelecom.net.ua/~agp1/ru/kbd.html

что значит слово агрегирует я не знаю правда.
Это тоже русский язык?
Может если я его осилю у меня появятся проблемы как у Крэга Лармана?
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642643
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реалист и оптимист
Программирования (при здравом уме) самого по себе, без обработки (манипулирования) данных(ми) существовать не может. Таковое оно никому не нужно.
Вот я в самом начале и высказал мысль о том, что ОО парадигма программирования получила широкую популярность, а хранение и обработка данных, в подавляющем большинстве случаев, основана на реляционных моделях баз данных. И чтобы одно состыковать с другим приходится, выполнять «танцы шамана с бубном».

мощно задвинули.
Так вот я говорю, что хотя ооп может и получило широкую популярность, но танцев с бубном не надо
что бы стыковать ооп парадигму и обработку и хранение данных, основанные на реляционной модели.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642784
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Реалист и оптимист

Нет, в носу Вам никто ковыряться не запрешает. Только на всякий случай, о всех этих книжках и их афтфторах - вот у меня есть книжка (толстая и умная) тыщя девятсот семист лохматого года Т.В. Олле "Предложения Кодасил по Управлению БД" и там в конце КОДАСИЛ сравнивается с РМД. Выводы
- процесс определения данных содержит ряд ограничений (прикинь, tchingiz, РМД "ограничили" с самог начала, а она, зараза упрямая, всё равно:)... а что будет когда до народа допрет, что они не её, а себя "ограничили"? :) )
- распространение ключей сверху вниз по глубокой струкутре (КМК это про внешние ключи) вызывает сомнение
- релционный подход не позволяет определять сложные циклические структуры
и ваще это голая теория, которой КОДАСИЛ в общем то соответсвует, зато предлагает гораздо больше возможностей и уже практически реализоан.

Я не думаю, что люди моложе 35 это слово - КОДАСИЛ - вообще знают. Однако 30-40 лет назад, уверен, страсти так же кипели, куча книжек была написана очень авторитетными на то время людьми. Где они? - эти книжки , эти авторы? А я уже старый у мну уже крисис среднего возраста, мне о вечном думать пора В общем , я стал критически к этому многообразию относится - подойду в книжном магАзине к полке, возьму том, полистаю - всё те же яйца, только в профиль... А уж когда слышу об ограничениях, противоречийх и импедансах (некоторые аффтары цинично усиливают до "импеданс несоответсвия"... КМК маслят масло), мне и смешно и грустно.

Модератор:
))
несмотря на грусть, просьба писать слово "авторы"
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34642797
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой. что такое импенданс?
а то у нас, за канавой возле Хрещатика такого слова не говорят.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34643200
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реалист и оптимистВот я в самом начале и высказал мысль о том, что ОО парадигма программирования получила широкую популярность, а хранение и обработка данных, в подавляющем большинстве случаев, основана на реляционных моделях баз данных. И чтобы одно состыковать с другим приходится, выполнять «танцы шамана с бубном».
Если СУБД чисто объектная, то никаких танцев и импедансов нет.
Если СУБД табличная (рел., сет., иерарх), то и программы д.б. "табличные", тогда и танцы не нужны.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34643275
AlexTheRaven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас, например, бизнес-классы наследуются от класса с идентификатором, временем создания, создателем, признаком актуальности, и методами "создать", "сохранить", "уничтожить". В зависимости от цели (и значения аргумента, передаваемого этим методам), используются различные стратегии сериализации и сохранения:
- создать новый/дописать существующий/переписать существующий файл в оперативной памяти, к-рый при выполнении определённого условия или по явной команде сохраняется на диск,
- создать новый запрос SQL CREATE/UPDATE "изменить и оставить актуальным"/UPDATE "объявить неактуальным", к-рый ставится в очередь и передаётся на сервер БД.
Т.о. бизнес-классы действительно не отвечают за сохранение себя - отвечает их родитель. Работает. Хотя классов бизнес-объектов у нас немного, чуть больше десятка, и ничего особенно сложного в их структуре и связях нет.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34643280
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модЕсли СУБД табличная (рел., сет., иерарх), то и программы д.б. "табличные", тогда и танцы не нужны.
- видимо создатели Hibernate, TopLink, Kodo и других ORM (Object Relational Mapping) ерундой занимаются?

- какая бы ни была СУБД, а программирование хотелось бы объектное :)
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34643371
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov- видимо создатели Hibernate, TopLink, Kodo и других ORM (Object Relational Mapping) ерундой занимаются?
Именно так.
Kachalov
- какая бы ни была СУБД, а программирование хотелось бы объектное :)
Сделайте свою ОСУБД и вперед.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34643413
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модСделайте свою ОСУБД и вперед.
- вот такой ерундой точно заниматься не буду. Мне вполне хватает реляционных СУБД и объектного маппинга существующего в EJB
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34643464
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделайте свою ОСУБД и вперед. Согласен! Добавлю - дополните ее основанными на РМД возможностями по групповой обработке данных - и будет Вам вообще счастье .:)

модератору Насчет "аффтар"ов - ни хотел никого обидеть. Понимаю, что эти люди заслуживают уважение, поскольку они строили то, на чём мы сейчас сидим и что воспринимаем как само собой разумеющееся. Но все таки там выразительная цель такая была - создать атмосферу легкого стеба:). Например, написал магАзин, что тоже неправильно. А некоторые тут без заглавных и знков препинания пищут ;). стиль у них такой.сугубо индивидуальный, за что их и ценим.
Модератор:
))тут обиды не причем.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34643467
igorolv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StalkerSМожет у кого-нибудь есть хорошие ссылки по теме, или даже электронные книжки, посвященные этой тематике ?
М. Фаулер. Архитектура корпорпоративных програмных приложений
Пожалуй, одна из лучших книжек, рассматривающих различные способы построения ORM, а также существующие решения.

StalkerS Как правильно сохранять объекты бизнес-логики в базе данных?
В зависимости от платформы разработки проекта, СУБД, размера проекта, квалификации разработчиков, желаемого времени входа новых разработчиков в проект и ряда других исходных условий выбрать один из коммерческих ORM, либо же писать свой ORM.

Если учитывать только платформу разработки (например), то:
.NET -> ADO.NET (DataSet)
J2EE -> Hibernate
(с криком убегает от HW на эту тему)

P.S.
В случае выбора варианта "писать свой ORM" нужно быть очень осторожным:
а) можно потратить кучу времени и денег и получить в результате бледный аналог DataSet-ов ADO.NET. Платят обычно за бизнес-логику, а не за разработку ORM.
б) по крайней мере учитывать, что один объект бизнес-логики может состоять из нескольких тысяч записей в нескольких десятках таблиц.
в) универсальное решение "для усех СУБД" может очень сильно выйти боком

P.P.S. Да, кстати, "единственно правильного способа сохранять объекты в базе данных" пока нет
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34643612
sandreynik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Странная постановка вопроса "Как правильно сохранять объекты бизнес-логики в базе данных". Зачем вообще их там сохранять. Объект - это свойство, методы , события (данные + код). Где хранится код наверное все знают. Наверно глупо его хранить в Базе Данных. Возможно речь идет только о хранении данных бизнес объекта а не самого объекта. А это уже совсем другая песня. Хранить можно где угодно в БД в XML файле и т.д. И я не вижу какие трудности здесь могут возникнуть. Храните в том виде в каком Вам удобно.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34643650
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
U-geneДобавлю - дополните ее основанными на РМД возможностями по групповой обработке данных - и будет Вам вообще счастье .:)
ОСУБД хранит и обрабатывает объекты, представленные списками этих самых объектов. РМД вроде как не нужна.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34643668
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov- вот такой ерундой точно заниматься не буду.
Напрасно. Берем любую пром. СУБД, используем ее как метод доступа и делаем свою ОСУБД. При необходимости можно использовать оба уровня.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34643958
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод Kachalov- вот такой ерундой точно заниматься не буду.
Напрасно. Берем любую пром. СУБД, используем ее как метод доступа и делаем свою ОСУБД. При необходимости можно использовать оба уровня.
- реализуем адаптивное кэширование, объектные транзакции, сетевой доступ к объектам, панель управления и получаем 30% от возможностей сервера приложений + массу потеряного времени + продукт неизвестного качества (тестируем само собой на заказчике)
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34644192
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov- реализуем адаптивное кэширование, объектные транзакции, сетевой доступ к объектам, панель управления и получаем 30% от возможностей сервера приложений + массу потеряного времени + продукт неизвестного качества (тестируем само собой на заказчике)
ничего этого делать не надо (а что надо - вы не указали)
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34644257
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модничего этого делать не надо (а что надо - вы не указали)
- может кому объектные транзакции и не нужны, так же как и удаленный доступ к бизнес объектам, а мне при работе с реляционными базами это необходимо. А Вы уважаемый мод могли бы поподробней написать, а то теперь все думают что Вы обладаете некоторыми сокровенными знаниями которыми не хотите поделиться с другими, да еще и флейм разводите.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34644310
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovА Вы могли бы поподробней написать
Конечно можно.
Транзакциями занимается базовая РСУБД
Доступ к объектам (хоть удаленный хоть локальный) - "ОСУБД"
Вы работаете с "ОСУБД", РСУБД исп. только в исключительных случаях.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34644437
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод
Транзакциями занимается базовая РСУБД
Доступ к объектам (хоть удаленный хоть локальный) - "ОСУБД"
Вы работаете с "ОСУБД", РСУБД исп. только в исключительных случаях.
- представим такой случай:
Два клиента осуществляют транзакции с коллекциями объектов типа А, каждый из которых содержит объектное поле типа Б. В свою очередь объект типа Б имеет поле С типа INT. В обеих коллекциях содержатся объекты типа A, связаные с общим объектом Б1 типа Б. Один из клиентов меняет значение поля С в объекте Б1 в рамках свой транзакции. Второй клиент должен увидеть изменения значения поля С для объекта Б1 в соответствии с установленным уровнем изоляции транзакции.
Внимание вопрос: кто по вашему должен заниматься реализацией механизма маппинга объектной транзакции на РСУБД? Программист разработчик конечного приложения или сторонние программисты предоставляющие готовые универсальные ОТМ (Object Transact Manager)?
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34644499
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov- представим такой случай:
Чессно говоря не понял в чем проблема
Kachalov кто по вашему должен заниматься реализацией механизма маппинга объектной транзакции на РСУБД?
Транзакции не надо маппить:
Код: plaintext
1.
2.
3.
4.
5.
6.
Создать объект1 -- операция ОСУБД
.....
Удалить объект2 -- операция ОСУБД
.....
Изменить объект3 -- операция ОСУБД
commit  -- отрабатывается РСУБД, изменения становяься видимыми для всех
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34644545
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модcommit -- отрабатывается РСУБД, изменения становяься видимыми для всех
- с чего бы это? у меня как у второго клиента в памяти висит аналогичная коллекция с теми же объектами, почему они будут синхронизироваться с БД когда там первый клиент поменяет значение для одного из полей? Кроме того не факт что я "хочу видеть" все изменения - это должно регулироваться уровнем изоляции транзакции.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34645068
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov модcommit -- отрабатывается РСУБД, изменения становяься видимыми для всех
- с чего бы это? у меня как у второго клиента в памяти висит аналогичная коллекция с теми же объектами, почему они будут синхронизироваться с БД когда там первый клиент поменяет значение для одного из полей? Кроме того не факт что я "хочу видеть" все изменения - это должно регулироваться уровнем изоляции транзакции.

Так это не проблема объектной ориентированности.
Это проблема синхронизации различных кэшей.
Ваша коллекция объектов на втором клиенте есть (в какомто смысле) копией состояния БД - кэшем.
С классами это не связано вообще.
Другое дело, что, возможно, Вы хотите чтобы решение в терминах классов рассказали.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34645271
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizТак это не проблема объектной ориентированности. Это проблема синхронизации различных кэшей.
- проблема в том что можно отобразить объекты и действия над ними, в том числе в транзакционном контексте, на РСУБД, но реализация такого отображения это огромный и ненужный для рядового программиста (так как есть готовые ORM) труд.

tchingizДругое дело, что, возможно, Вы хотите чтобы решение в терминах классов рассказали.
- я не хочу что бы мне рассказывали как бы это могло быть, я знаю что все это уже реализовано в технологии EJB и мне непонятно зачем изобретать велосипед, когда весь мир уже давно этим успешно пользуется.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34645290
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
за бесплатно я не буду даже над этим думать.
До тех пор, пока не появится существенных причин, чтобы иметь два кэша.
Пока мне всегда хватало одного.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34645386
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizДо тех пор, пока не появится существенных причин, чтобы иметь два кэша.
Пока мне всегда хватало одного.
- о каких кэшах вообще идет речь? Обычная работа с данными в рамках двух параллельных транзакций. Будет три клиента - будет три транзакции и соответственно три выборки объектов с которыми ведется работа и данные этих выборок должны синхронизироваться с учетом уровня изоляции с данными из РСУБД. Будет десять клиентов - будет десять выборок.

tchingizза бесплатно я не буду даже над этим думать.
- не я начал этот топик. У меня проблем с отображением объектов на РСУБД нет. Так же нет проблем при работе с объектными транзакциями. Все технологии которые позволяют это делать легко и просто уже перечисленны выше: EJB, Hibernate, TopLink, Kodo и т. п. Хотите думайте, хотите не думайте - дело Ваше.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34645785
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
об этих
автору меня как у второго клиента в памяти висит аналогичная коллекция с теми же объектами, почему они будут синхронизироваться с БД когда там первый клиент поменяет значение для одного из полей?
коллекция чего угодно, которая должна синхронизироваться с базой данных,
есть второй кэш.
Первый живет в субд и не заметен для программиста.
Вопрос синхронизации управляемого Вами кэша с базой данной не имеет отношения к обьектной ориентированности. Это всегда проблема.
Нет коллекции чего угодно (байтов, списков, деревьев, объектов) которую надо с бд синхронизировать - нет проблемы.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34646030
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizНет коллекции чего угодно (байтов, списков, деревьев, объектов) которую надо с бд синхронизировать - нет проблемы.
- нет программы - нет проблемы.

- про терминологию: видимо любой объект вытащенный из базы - это, по вашему, уже кэш?
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34646299
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, но, возможно, не будет решена поставленная задача, для которой нужно писать программу.

Любая область памяти, для которой требуется выполнять синхронизацию с другой областью памяти
уже смахивает на кэш. Например, удаленная бд и локальная, между которыми происходит репликация.
Это таже проблема с который Вы начали.
Слово кэш не принципиально. Принципиально, что требуется синхронизация между,
возможно, исскуственно созданной коллекцией, возможно, искуственно созданных объектов и базой данных.



а по Вашему, что есть кэш?
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34646496
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov- с чего бы это? у меня как у второго клиента в памяти висит аналогичная коллекция с теми же объектами, почему они будут синхронизироваться с БД когда там первый клиент поменяет значение для одного из полей?
Код: plaintext
1.
2.
Заблокировать объект3
Изменить объект3
Kachalov
Кроме того не факт что я "хочу видеть" все изменения - это должно регулироваться уровнем изоляции транзакции.
Это функция РСУБД.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34646503
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov- проблема в том что можно отобразить объекты и действия над ними, в том числе в транзакционном контексте, на РСУБД, но реализация такого отображения это огромный и ненужный для рядового программиста (так как есть готовые ORM) труд.
Так рядовой программист работает только с объектами ОСУБД и вообще не видит никаких таблиц.
Откуда проблемы, непонятно.
Kachalovвесь мир уже давно этим успешно пользуется.
В чем успех меряем ?
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34646661
Фотография branicki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSЕсли следовать советам Крэга Лармана (и по всей видимости далеко не его одного), бизнес-классы не должны отвечать за сохранение себя в БД (т.е. обладать методами сохранения в БД и материализации из нее), так как это приводит к смешиванию их обязанностей с обязанностями технических служб.


Вот посмотри тут описывается подходящий наверно для тебя вариант дизайна системы.

http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34646738
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод
Код: plaintext
1.
2.
Заблокировать объект3
Изменить объект3

И убить весь параллелизм?
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34646955
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучИ убить весь параллелизм?
Ессно - для этого и делается. Заблокировать на изменение/удаление.
...
Рейтинг: 0 / 0
Как правильно сохранять объекты бизнес-логики в базе данных
    #34647302
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модЕссно - для этого и делается. Заблокировать на изменение/удаление.
А как же оптимистическая блокировка? Или более общие Non-lock CC-алгоритмы?
...
Рейтинг: 0 / 0
56 сообщений из 56, показаны все 3 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как правильно сохранять объекты бизнес-логики в базе данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]