powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Раздвоение личности или "а сейчас-то что делать?"
25 сообщений из 27, страница 1 из 2
Раздвоение личности или "а сейчас-то что делать?"
    #32231775
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я давно разрабатываю базы на MS SQL и клиентов к ним, иногда на VB, но все больше на С++.
Но вот, мучит меня в последние годы раздвоение личности.
Когда проектирую БД - применяю одни понятия.
Когда ту же предметную область разрабатываю на C++ - совершенно другие.

Поясню.

Есть базовый класс - субъект. (имена всех действующий лиц вымышленные, сам пример - минимальный).
таким цветом объекты, таким - поля объектов.

Этот субъект обладает свойствами:
Name, ShortName, Contacts, (collection of Contact)

Класс наследник - Юр.лицо, дополнительно к унаследованному:
ОКПО, Директор (ссылка на Физ.лицо).

Еще один наследник - Физ.лицо (набор дополнительных уникальных полей для Физ.лица).

Класс - Документ (тоже базовый класс для целой ветки):
Дата, Кому (ссылка на субъект), ОтКого (ссылка на субъект), ну и т.д.

Прошу обратить внимание, естественное для удобного ООП программирования представление не оперирует ключами (всякими ID или составными ключами), объекты просто ссылаются в памяти друг на друга. При таком подходе, любая самая навороченная бизнес логика превращается в детский лепет даже на C++.
И к тому же ужасно быстро все работает, так как все объекты, по мере поступления на клиент (mid-tier тоже для базы клиент), сразу "сцепляются" друг с другом в граф, т.е. для всей системы в целом все разновидности JOIN уже выполнены.

Как это хранить по-человечески в базе? Перепробовал кучу способов. В 1С была бы отдельная таблица на каждый класс, но мне нужна поддержка целостности на уровне DB, т.е. таблица документ должна ссылаться на таблицу субъекты.

Таким образом, у меня есть таблицы для базовых классов, и к ним идет море таблиц с небольшим количеством полей и отношением 1->1 для хранения аттрибутов классов-наследников.
Когда выполняешь какие вычисления на стороне сервера, то постоянно вынужден делать многочисленные JOIN чтобы добраться до аттрибутов требуемых наследников, что не сказывается положительно на общем быстродействии.

А если проектировать по-старому, отталкиваясь именно от структуры DB, то клиент оперирует разве что такими понятиями, как рекордсет, поля и пр.
Т.е. безо всякой типизации и намека на ООП.

Смотрел приличное количество всяких таких Entity-engines, но в большинстве своем они просто плодят таблицы под каждый класс, без обеспечения целостности на уровне DB, что ну-никак не устраивает.
Как связать типизацию и графоподобную структуру ООП объектов с плоскими таблицами?

Ну не хочу я в классе Документ держать поле Кому_ID, я хочу держать там просто ссылку Кому на базовый класс Субъект, а уже у того брать ID:
Код: plaintext
int kID=doc1.To().ID();

Не надо только слать замечания, что я вынужден буду к документу doc1 заранее читать из базы зависимые данные вдоль по всему графу зависимостей, который может ненароком охватить вообще все данные, наличиствующие в базе. Есть уже развитый кэширующий механизм, который берет данные только по требованию, а по умолчанию на зависимых элементах стоят "заглушки" вплоть до первого обращения к экземпляру.
Тут же встает вопрос синхронизации, который был с "блеском" решен (целый отдельный синхронизирующий движок, тонна ручного труда).
Правда получил прикольный побочный эффект - из-за развитого механизма синхронизации и кэширования примерно на порядок снизился трафик к базе. Клиент умудряется через интернет непосредственно с базой работать (если бы Главный Архитектор 1C уже умер, то он бы сейчас в гробу перевернулся).
Т.к. у базы запрашивается только то, чего еще нет у клиента, и многократно всякие там "Name" или "ShortName" и прочие справочные данные не гоняются.

Блин, но КАКОЙ ЭТО ВСЕ НАВОРОТ получился. Прямо как доказательство того, что современное ООП ну никак не хочет подружиться со старой доброй реляционной моделью. (по которой так удобно делать мудренные и быстрые выборки :) )

Да еще и классы довольно жестко запрограммированы, несмотря на мощную поддержку, все классы известны на этапе компиляции, т.е. железобетон! Тоже ведь не выход (или единственный выход? Или может еще IDispatch - выход?).

Да, нам предрекают тут во всяких манифестах светлое иерархическое будущее взамен реляционного настоящего...
А сейчас-то что делать?

Все вышеописанное было в виде экспериментов, на основе предыдущих реальных разработок. После оценки реальной трудоемкости такого подхода и требуемого уровня квалификации разработчиков, весь первоначальный пыл как-то осел. Потому и задался вопросом. А писать в старом стиле, после удачных экспериментов рука уже не поднимается - ну, думаю, это многим понятно.

ЗЫ
Эта .NET ну никак не помогла, единственный шаг вперед - мастер генерации типизированных рекордсетов, весьма сомнительное подспорье, спасает разве что от очевиднейших ляпсусов, которые можно либо по пьяне нагородить либо будучи студентом каким. Т.е. пользы 0, потому как все тот же рекордсет, только с защитой от дурака.
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32231937
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
По-моему, Вы не с того конца беретесь за дело. Вы прекрасно знаете, как должен выглядить код и пытаетесь подогнать под него базу. Не получится. Код - Ваш, что хотите, то и делаете. А вот свойства и методы базы Вам поменять не удастся. Наоборот надо. Сделать базу и под нее писать код. Неконструктивно жаловаться на неидеальность инструмента. Нужно использовать его сильные стороны и обходить слабые.
На мой взгляд, две главные задачи клиента - формировать и посылать на сервер строку запроса и отображать полученные от него данные.
Зачем прикручивать к этому ООП? Вернее прикрутить можно, но конечным результатом всех действий должно быть формирование текстовой переменной, содержащей текст запроса и посылка его на выполнение.

То, что описано в Вашем примере - почти хорошая реляционая модель.

Ну не хочу я в классе Документ держать поле Кому_ID, я хочу держать там просто ссылку Кому на базовый класс Субъект, а уже у того брать ID:
А придется. Впрочем, в чем разница между ссылкой и ID Субъекта, я не просек. Наверное, потому, что думаю понятиями SQL-сервера, а не языка программирования клиента.

Мой главный совет. Прекратите думать на С++! Думайте на SQL!
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32231962
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой главный совет. Прекратите думать на С++! Думайте на SQL!
\r
\r
Это после того как я столько времени приучался не думать на SQL а заставлял себя думать на ООП?
\r
\r
Беда в том, что большинство современных БД приложений, мягко говоря, слабоваты. Полностью красиво запихнуть логику на сервер БД не получается (я использую MS SQL, оракловцам чуть легче). Так что прилично приходится набрасывать кода на клиенте или сервере приложений. \r
\r
Какие сейчас наиболее популярные направления борьбы со cложностью:\r
\r
1. Entity engin - использует БД как просто место хранения состояний объектов. О таких вещах, как ограничение целостности, речь не идет. Мощь встроенных инструментов БД практически не используется. Зато очень удобно проектировать бизнесс-логику произвольного уровня сложности.\r
\r
2. База сама в себе. Интерфейс с пользователем - через набор хранимых процедур, инкапсулирующих всю необходимую логику приложения. Часто применяемый подход настоящих "зубров" БД. И совершенно не получается именно так спроектировать простейшую бухгалтерскую систему, где можно настраивать формулы и алгоритмы для автоматического расчета проводок, потому как на VB или чем-то подобном бухгалтер вполне может написать расчетный скрипт, а вот на Transact SQL - никогда! К тому же, полное проектирование приложения на стороне БД требует гораздо большей квалификации, чем обычный программер на Java там или VB. А где их взять, спецов-то в нужном количестве?..\r
\r
3. Смешанный тип - часто используется в 3-х звенке. Что удобно вычислять на сервере БД - вычисляют на БД, что не удобно - то на сервере приложений. При взгляде на такое приложение вообще обычно трудно выделить такие понятия как "концепция приложения". Зачастую больше подходит "писанина", потому как большинство проблем решены "по месту" (так собирались первые автомобили). Не программный продукт, а сборник компроммиссов. Толкаемые Microsoft "современные" решения как раз из этой области. Приходиться задействовать гораздо больше людей, чем если бы это было нужно используя варианты 1 или 2.\r
\r
Неплохая статейка. Я там в конце топа тоже свои 5 копеек вставил. Есть о чем призадуматься...\r
\r
А останеться ли в будущем вообще SQL? Не реляционный подход, а именно SQL?
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32232056
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2 по-моему правильно сказал. Формулировка и решение задачи в терминах множеств-отношений ничуть не хуже формулировки в терминах объект. Другое дело, есл Вы априори хотите строить приложение в терминах объектов и никак по-другому, то тут я врядли смогу еще что-то посоветовать, кроме как ждать и надеяться на светлое будущее в виде ООДБ. Коммунизм, как известно, будет построен в 1980 году. \r
\r
Совершенно непонятно, почему бухгалтер, освоивший VB, не сможет освоить в нужном объеме T-SQL. А вообще нельзя позволять пользователю менять код приложения, пишите интерпретатор.\r
\r
Насчет возможностей РСУБД в плане хранения бизнес логики рекомендую просмотреть посты ASCRUS-а в /topic/37397\r
Очень впечятляет.
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32232083
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 c127\r
\r
Совершенно непонятно, почему бухгалтер, освоивший VB, не сможет освоить в нужном объеме T-SQL. \r
Шутка? Да я в жисть в базу никого не пущу. В противовес этому, я в VBScript-е открываю только свои "безопасные" функции и объекты.\r
\r
А вообще нельзя позволять пользователю менять код приложения, пишите интерпретатор. \r
Дык, написан уже VBScript. Я его хостю и использую для именно там, где код может писать бухгалтер. Обычно это просто формула, иногда несколко ветвлений по if, но в принципе это может быть произвольный алгоритм. \r
\r
насчет этого:\r
Насчет возможностей РСУБД в плане хранения бизнес логики рекомендую просмотреть посты ASCRUS-а в /topic/37397 \r
Все замечательно! Чел догадался использовать предвычисленные данные и выполнять групповые операции вместо курсорных. Это все, несомненно правильные подходы, но речь не об этом. Что будет делать контора, если ASCRUS из нее уйдет? То-то. \r
Пример ASCRUS-а, а особенно реакция на него - крайне показательны. Весьма невысокой сложности бизнес-расчеты, полностью выполненные на серваке, дорогого стоят (в плане сложности разработки). \r
И насчет достигнутого быстродействия. Если сделать систему, описанную \r
здесь, и так же воспользоваться кэшированием, то результат однозначно побыстрее будет - уже экспериментировал. Жестко скомпилированное приложение работает куда как быстрее процедур на БД. \r
В принципе, вызывает удивление, что мало кто замечает очевидные вещи. Проектирование простейших алгоритмов средствами СУБД превращается в какой-то подвиг Матросова (сам занимался этим "подвигом" 4 года). Нормальные языки программирования в сочетании с ООП освобождают сознание от борьбы с надуманной сложностью, с необычайной легкостью делается ВСЕ! Сами же себя загнали с этим SQL в угол, и не замечаем. Расчеты по нескольку минут - норма (не в адрес ASCRUS, он такой же "пострадавший"). В 2001-м я писал под заказ систему на MS SQL2000, потому как у них накладные на 1C перепроводились по 2-10 мин (накладные по 2000 строк, справочник товаров очень большой). В моей системе на том же серваке проводка занимала около 2-х секунд, перепроводка около 4-х, но блин, такой огород навертел на ровном месте - кэш на кэше сидит и кешем погоняет...\r
\r
Что вообще есть программирование бизнес-логики с точки зрения программиста? Детский лепет, вот что! В одном месте взять, из другого отнять, в третье поместить. Утрирую, конечно, но суть именно та. Когда говорят о сложности "бизнесс-систем" меня тошнит, потому как правильнее сказать "рутинность", т.е. объем той самой бестолковой работы, но эта бестолковая работа порой начинает требовать усилий и проффесионализма. А вся эта надуманная сложность возникает из-за того, что применяем инструменты не по назначению (а иначе никак - медленна!). \r
В жертву приносятся драгоценные часы работы разработчика, корпящего над очередным велосипедом. Фигня вся эта "бизнес-логика", ненавижу! Хочу тратить на ЭТО как можно меньше времени. На своем С++ я бы этот расчет написал ну куда как быстрее (не в связке с БД, имеется ввиду монолитное приложение, описанное в приведенной статье), я бы даже толком задуматься не успел бы, как закончил и отладил (и если возникнет в каком месте надобность - ПОШАГОВО) Я с трудом себе представляю такой алгоритм расчета, програмирование которого средствами ООП занял бы более 0.5-1 часа. (ну в САМЫХ-САМЫХ случаях - пол-дня - день). А время лучше тратить на нечто более полезное, на жену и детей, например...
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32232089
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2

Ну не хочу я в классе Документ держать поле Кому_ID, я хочу держать там просто ссылку Кому на базовый класс Субъект, а уже у того брать ID:
А придется. Впрочем, в чем разница между ссылкой и ID Субъекта, я не просек. Наверное, потому, что думаю понятиями SQL-сервера, а не языка программирования клиента.

Ну и о чем тогда спор, если не понимаем? ID Субъекта - это искуственно введенный таг, ассоциация (ключ в терминах БД). Именно по этой ассоциации мы однозначно определяем субъекта (путем поиска его среди тысяч подобных).
А ссылка - это непосредственно адрес в памяти, мы уже НИЧЕГО НЕ ИЩЕМ, мы просто пользуемся объектом. Повторюсь: все JOIN уже выполнены ! (так понятно?) Это почище, чем кэши с предвычисленными данными...

Народ, просто попытайтесь себе представить, у нас между объектами существуют не ассоциативные (логические) связи а ФИЗИЧЕСКИЕ! ФИ-ЗИ-ЧЕС-КИ-Е!
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32232346
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 vdimas

c127>Совершенно непонятно, почему бухгалтер, освоивший VB, не сможет освоить в нужном объеме T-SQL.
vdimas>Шутка? Да я в жисть в базу никого не пущу. В противовес этому, я в VBScript-е открываю только свои "безопасные" функции и объекты.

Пардон, утверждение выглядело так:
vdimas>потому как на VB или чем-то подобном бухгалтер вполне может написать расчетный скрипт, а вот на Transact SQL - никогда!

Речь идет только о сложности освоения Transact SQL. Так я и утверждаю, что Transact SQL в основной своей части не сложнее васика. Какой вопрос - такой ответ. И потом, где в постановке упоминается VBScript? Между прочим Basic, используемый как язык программирования в среде VB, и VBScript есть разные языки, не нужно их путать.

>Что будет делать контора, если ASCRUS из нее уйдет?

Да то же самое, что будет делать, если из конторы уйдете Вы. Эта проблема к технологии разработки (в смысле ООП, не-ООП) отношения не имеет.

>Что вообще есть программирование бизнес-логики с точки зрения программиста? Детский лепет, вот что! В одном месте взять, из другого отнять, в третье поместить

Так любое программирование детский лепет: из одной ячейки взять, чего-то добавить и в другую положить. Это строгая математическая теорема.

>Проектирование простейших алгоритмов средствами СУБД превращается в какой-то подвиг Матросова (сам занимался этим "подвигом" 4 года).

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

>И насчет достигнутого быстродействия. Если сделать систему, описанную
здесь, и так же воспользоваться кэшированием, то результат однозначно побыстрее будет - уже экспериментировал. Жестко скомпилированное приложение работает куда как быстрее процедур на БД.

Последнее утверждение неверно. Это уже обсуждалось, очень сильно зависит от данных. А время чтения данных в кэш, например, Вы не забыли учесть при своих экспериментах? А еще в DB2 сохраненки как раз представляют собой "жестко скомпилированное приложение", как с этим быть, как это было учтено в экспериментах? А если Вы экспериментировали только с MSSQL, то не нужно делать общих выводов. А еще руки могли оказаться кривые (я не утверждаю, что так оно и есть, но ведь может теоретически быть и такое, ведь верно). А еще я не очень представляю себе "жестко скомпилированное приложение", частично написанное на VBScript или даже на VB.

>Народ, просто попытайтесь себе представить, у нас между объектами существуют не ассоциативные (логические) связи а ФИЗИЧЕСКИЕ! ФИ-ЗИ-ЧЕС-КИ-Е!

Это сильно! Сорвали аплодисменты, поздравляю. А Вы там у себя о физические связи между объектами не спотыкаетесь, когда на обед уходите? Шутка.
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32232362
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз меня здесь вспомнили, решил заглянуть :)

vdimas
В принципе ничего страшного не произойдет, если я уйду с конторы, уже дописав и отладив проект - мой расчетный движок полностью работоспособен, отлажен и маштабируем. Чтобы его сопровождать, уже не надо знать его принципы работы и иметь обширные познания в SQL. Имеются кэша, где все разложено по полочкам, имеются ХП, где элементарными запросами можно описывать алгоритмы расчетных обьектов - справиться любой человек, нормально знающий основы SQL.

Что такое примитивная бизнес-логика мне не понятно, во всяком случае в проекте расчета зп она отнюдь не примитивна. ООП кстати при бизнес-логики проекта ничем помочь не смог бы - каждый алгоритм уникален, поэтому все преимущества ООП никак не помогли бы при решении задачи. Можно сказать наоборот, посредством SQL я достиг формализации задачи, сведя все разнообразные виды расчетов до уровня описания расчетных обьектов, избежав ветвлений в коде и разбив расчет на автономные ХП, каждая из которых отвечает за реализацию каждого алгоритма расчетного обьекта за определенный интервал времени.

Теперь насчет физических, а не ассоциативных связей - не стоит забывать, что РСУБД это уже физическая модель хранения БД, в отличие от ООП, где логическая (интерфейс) и физическая (реализация) модели фактически можно сказать обьединены. Зачем валить на реализацию, что Вам не хватает возможностей. РСУБД прекрасно справляются со своей ролью хранилищ данных, позволяя описывать их хранение, обработку и целостность. Логическая модель проектируется отдельно, будь то в инструментах моделирования данных (Case), на бумаге или просто в голове (у кого как получается). Нельзя сказать, что РСУБД не позволяет описывать, хранить и работать с обьектными моделями - у меня например в проекте расчетный обьект это самый настоящий обьект, описывающий алгоритм решения в расчете. У меня есть маски начислений - это тоже самые настоящие обьекты, описывающие группы расчетных обьектов, с поддержкой наследования от масок предков (кстати поддерживается множественное наследование). Все прекрасно вписывается в релляционную модель, все прекрасно обрабатывается через SQL. Так что если Вы хорошо знаете ООП и так же хорошо SQL, то я лично сложностей для себя не увидел в совмещении этих 2 технологий тогда, когда это выгодно.

Кэша дело добровольное - мне они в проекте были полезны и эффективны, поэтому я их и сделал.

К слову сказать сейчас меня как эксперта по моделированию БД с сложной бизнес-логикой пытается привлечь некая фирма, у которой уже реализована вся входящая структура БД и им необходимо реализовать все расчеты на сервере, так как обьемы расчитываемой информации гигантские, расчеты сложные и сделать их быстрыми, кроме как на SQL не предоставляется возможным. Главное отличие проекта от моего в том, что у меня несложная входящая информация, но очень сложные сами расчеты, у них же с точностью до наоборот - чрезвычайно простой расчет, но очень сложные способы определения аттрибутов входящей информации, участвующей в расчете и зависящей от сотен различных условий их действия на момент расчета. Так как мне не предлагается делать весь проект, который по обьему превосходит даже мой текущий, а только сделать расчетную часть, я может быть и соглашусь на подходящих условиях, во всяком случае такая задача меня заинтересовала. Так же я хочу предложить им реализовать мою схему хранения архивных данных результатов расчетов не в виде полного обьема записей, а по точкам последних расчетов, когда без изменения входящей информации расчет не производится, данные в архивы не вписываются и на такой период расчетными суммами считаются суммы последней точки расчета перед этим периодом. С учетом того, что входящая информация по отношению к БД меняется в расчетном периоде максимум у 10% информации, подлежащей расчету, это позволит не только ускорить расчеты, но и сократить раз в 10 обьем БД, что немаловажно для обьемов, оперирующих гигабайтными размерами. Тут уже при реализации не кэша будут участвовать, а больше компиляция расчетной информации в архивное описание состояние обьектов подлежащих расчетам. Ну в общем если я за проект возьмусь, то решение можно будет потом и выложить в интернет, самому интересно, что получится :)
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32232407
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2vdimas: я полагаю, что нет ничего плохого в стремлении создать отображение ООП на реляционную модель. Но судя по всему это отображение или не возможно или нетривиально, иначе мы бы его давно использовали.
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32232433
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 c127\r
\r
Между прочим Basic, используемый как язык программирования в среде VB, и VBScript есть разные языки, не нужно их путать. \r
Ага, точно, только приложение еще и на C++ написано, а на VBScript используется для настройки бухгалтерских проводок. Движок VBScript бесплатный и его можно вставлять в свои программы.\r
\r
>Что будет делать контора, если ASCRUS из нее уйдет? \r
Да то же самое, что будет делать, если из конторы уйдете Вы. Эта проблема к технологии разработки (в смысле ООП, не-ООП) отношения не имеет. \r
Я ушел 2 года назад, а они еще работают, т.к. могут менять расчеты и схемы проводок без меня.\r
\r
>Что вообще есть программирование бизнес-логики с точки зрения программиста? Детский лепет, вот что! В одном месте взять, из другого отнять, в третье поместить \r
\r
Так любое программирование детский лепет: из одной ячейки взять, чего-то добавить и в другую положить. Это строгая математическая теорема. \r
Ню-ню, я одно время разрабатывал лексичесике и синтаксичесикие анализаторы, системы обработки и анализа сигналов, кодеры/декодеры радиосигнала и т.д. и т.п. Но, к моему большому сожалению, более-менее кормит у нас сейчас именно рынок "бизнес-приложений", все остальное сдохло или на пиратском диске за копейки.\r
\r
>Проектирование простейших алгоритмов средствами СУБД превращается в какой-то подвиг Матросова (сам занимался этим "подвигом" 4 года). \r
\r
Ну зачем же сразу обо всех по себе судить. Наверное просто нужно было книжки по SQL почитать перед подвигом. Хотя подвиг конечно звучит гордо. \r
Явно разный взгляд на вещи. :) Я вообще не знаю, есть ли такая по сложности программисткая задача, которая бы была мне не под силу (скромно, да, но для рынка бизнес-приложений это верно в первую очередь).\r
А подвиг , это когда разработка одних и тех же алгоритмов на SQL занимает раза в 4 больше времени, чем на том же C++. А скорость моей писанины на SQL, я так думаю, не самая маленькая. При желании и посоревноваться можно со всякими советчиками книжки читать. (как, интересно, можно было разработать несколько больших систем на SQL не читая книжек? Да и само чтение книжек еще не означает, что этого достаточно :) ).\r
\r
\r
>И насчет достигнутого быстродействия. Если сделать систему, описанную \r
здесь, и так же воспользоваться кэшированием, то результат однозначно побыстрее будет - уже экспериментировал. Жестко скомпилированное приложение работает куда как быстрее процедур на БД. \r
\r
Последнее утверждение неверно. Это уже обсуждалось, очень сильно зависит от данных. А время чтения данных в кэш, например, Вы не забыли учесть при своих экспериментах? \r
Хм, элементарное невнимательное отношение к вопросу. Тебе стоило сначала сходить по приведенной ссылке на топик и разобраться в предлагаемых принципах построения ООП СУБД. КАКОЕ НАФИГ ЧТЕНИЕ В КЭШ?\r
\r
А еще я не очень представляю себе "жестко скомпилированное приложение", частично написанное на VBScript или даже на VB. \r
Да, каша. Может не очень подробно изъясняюсь, да просто не охота сверхбольшими топами хамить.\r
За спиной приложения и на VB, и на C++, и на С++ со встроенным VBScript движком. (Все это приводилось как пример существующих, и общепринятых способов - см. я там перечислял подходы).\r
в первом топе шла речь об экпериментах в сторону реализации бизнес-приложений с использованием ООП.\r
\r
Все же сходи по этой ссылке. Там U-Gene предлагает модель. Среди ответов (в конце) есть мое предложение о реализации модели.\r
\r
Тема очень серьезная, рассматривается сразу со всех сторон. Смотреть на нее только с позиции SQL бессмысленно.
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32232437
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ASCRUS

Категорически протестую против выкладывание на обсуждение уже готовой реализации!
Так не интересно!


Давай ка все интересное обсуждать! (А то и так мало интересных вопросов).

К тому же это может быть полезно и твоей разработке (я уверен, что так и будет). У самого есть некоторый опыт именно по организации и кэшей и по хранению и поддержанию актуальности всяких итоговых данных на некоторую точку расчета. (В разных ситуациях, ессно, применяются разные подходы).

Давай, давай, не отказывайся. :)
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32232580
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как раз пока я должен отказываться от обсуждения - во первых обсуждать нечего, я еще не пришел к договоренности с работодателем, что я возьмусь им помочь. Во вторых проект держится в секрете от конкурентов и пока он не будет реализован и не войдет в эксплуатацию подробностей его постановки я раскрыть не могу, а без постановки обсуждать реализацию о чем то абстрактном бестолку. В третьих если я его возьму "на дом", то боюсь свободного времени у меня в близжайшие 4 месяца не будет вообще.
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32232709
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот так всегда - нет в жизни счастья ...

самый большой дефицит - дефицит единомышленников.
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32232886
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некоторых за их идеи на костре жгли - их мысли не только единомышленников не собрали, но и вызвали вспышку ненависти. Глубокую мысль не могут одновременно думать много. Так что не стоит так расстраиваться.
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32233434
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vdimas> Хм, элементарное невнимательное отношение к вопросу. Тебе стоило сначала сходить по приведенной ссылке на топик и разобраться в предлагаемых принципах построения ООП СУБД. КАКОЕ НАФИГ ЧТЕНИЕ В КЭШ?

vdimas> Все же сходи по этой ссылке. Там U-Gene предлагает модель. Среди ответов (в конце) есть мое предложение о реализации модели.

В том среде прямо ПЕРЕД твоим "предложением" находится мой пост (а есть и другие там же, но это уже не важно). Отсюда следует, что я туда ходил и в вопросе разобраться пытюсь. Отсюда же следует, что ты со средом не ознакомился. Так что "элементарное невнимательное отношение к вопросу" налицо.

c127> Так любое программирование детский лепет: из одной ячейки взять, чего-то добавить и в другую положить. Это строгая математическая теорема.

vdimas> Ню-ню, я одно время разрабатывал лексичесике и синтаксичесикие анализаторы, системы обработки и анализа сигналов, кодеры/декодеры радиосигнала и т.д. и т.п.

Да, теперь я понимаю, что за будущее ООДБ переживать не нужно. Успехов в укреплении физических связей между объектами.
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32233462
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 c127\r
Все, скатились на перепалку.\r
\r
vdimas> Ню-ню, я одно время разрабатывал лексичесике и синтаксичесикие анализаторы, системы обработки и анализа сигналов, кодеры/декодеры радиосигнала и т.д. и т.п. \r
Да, теперь я понимаю, что за будущее ООДБ переживать не нужно. Успехов в укреплении физических связей между объектами.\r
\r
Сравнить вкус двух плодов может лишь тот, кто отведал их оба.\r
В приведенных областях на первое место выходят сложнейшие математические расчеты, и все задачи решаются в сторону нахождения различных критериев эффективности (минимумов времени отклика, стоимости, требований к вычислительной мощности, ... или максимумов быстродействия, ...). \r
\r
Просто поверь на слово, "сверхсложные" бизнес-системы описываются моделями на пару порядков проще. Хотя, и бывает, что они больше по размерам. Так вот в этом случае слову "сложность" я предпочитаю "рутинность". (Бывает, правда порой неординарные задачки, над которыми действительно более-менее интересно призадуматься, но это скорее исключение)\r
\r
Да и вообще, часто ли мы при разработке базы данных делаем мало-мальские расчеты? Весь форум пестрит прямо и вскользь сказанными фразами - "вот система стала не справляться, надо переделывать на репликацию, памагите" и т.д. Налицо обычная халатность. \r
\r
А острить по поводу ООП не стоит. ООП далеко не самоцель, а всего лишь инструмент, позволяющий с легкостью писать системы практически произвольной сложности. Хороший ООП язык обладает возможностью создавать произвольное число типов и описывать произвольные операции над этими типами. (а С++ вообще позволяет перегружать операторы языка, что к нехило повышает наглядность). Напротив, SQL ни как не помогает бороться со сложностью: когда в базе около тысячи таблиц, несколько тысяч запросов и процедур - "ворочать" таким хозяйством не самое легкое дело, а ведь эти размерности - плевые, с точки зрения современного ООП, потому как там - иерархия объектов и операций, получаем высокую эфективность проектирования. Собственно об этом и топ, хочется работать эфективно, а не писать бесконечные SELECT c черти-каким уровнем вложенности. Мне такая фигня только в самом начале удовольствие приносила, по мере превращения в рутину, и реальной оценки затрачиваемого времени на проектирования простейших операции (простейших с точки зрения "всемирного программирования", а не SQL), которые однако могут требовать построения ну очень хитроумных запросов, и дополнительного изучения екзекушн-плана. \r
Программируя в ООП я сам "проектирую екзекушн план", и опираюсь я здесь не на статистику (которую разработчик БД забыл поднастроить - сплошь и рядом), а на особенности предметной области и выбранной модели.\r
\r
Ладно, грызня все это. Вот еще интересная ссылка:\r
вот еще ссылка[/http]
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32233467
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
c127

В том среде прямо ПЕРЕД твоим "предложением" находится мой пост (а есть и другие там же, но это уже не важно). Отсюда следует, что я туда ходил и в вопросе разобраться пытюсь. Отсюда же следует, что ты со средом не ознакомился. Так что "элементарное невнимательное отношение к вопросу" налицо.

Далековато тред ушел от первоначальной темы, так что эту "жвачку" в конце читал "по диагонали", да и вообще, не одного выступления именно по существу статьи, все больше бесполезных holy wars, типа:

Используемые в настоящее время СУБД представляют собой результат развития средств управления внешними запоминающими устройствами
no coments :) - кому-то очень смешно от собственной бестолковости, прикол как раз в том что это основная причина развития СУБД. Потому как для данных, хранимых в памяти с быстрым произвольным доступом применяют совершенно иные модели.

с127 Еще раз. Наверное статья интересная, но читать ее невозможно. Можно ли убрать как-нибудь иероглифы, т.е. заменить их на человеческие символы, или выложить статью в человеческом формате (pdf,ps)?

с127 Я частично прочитал вторую часть статьи и теперь вспомнил, что где-то там этот вопрос обсуждался. Просто забыл. Теперь скачал вордовый файл, почитаю на досуге с нормальными обозначениями. Но меня лично на сегодняшний день больше интересует формализация понятия объект, т.е. первая статья, с ней разбираюсь потихоньку.

я плакаль...

Заслуживает уважения способность господина U-Gene отвечать подробно, не жалея своего личного времени.
Полностью с уважаемым согласен в области взглядов на ООП - удобный инструмент . А не какая не модель, парадигма, самоцель или тема для holy wars...
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32235990
Репликант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 vdimas: \\r
Но вот, мучит меня в последние годы раздвоение личности. \\r
Когда проектирую БД - применяю одни понятия. \\r
Когда ту же предметную область разрабатываю на C++ - совершенно другие.
\\r
\\r
Это закономерное следствие используемых вами да и не только вами одновременно разных парадигм/подходов/моделей/языков для описания предметной проблемы\\r
\\r
Прошу обратить внимание, естественное для удобного ООП программирования представление не оперирует ключами (всякими ID или составными ключами), объекты просто ссылаются в памяти друг на друга. \\r
\\r
Собственно это полезная естественная возмость ОО языка или модели. У реляционной модели свои (другие) полезные возможности как и у языка запросов типа SQL. Следует учесть, что все определялось кругом задач и возможностями, к-рые были исторически заложены в ту или иную технологию, т.е РМ - это 70-е годы, а ООАП и ООП - это конец 80-90-е годы\\r
\\r
При таком подходе, любая самая навороченная бизнес логика превращается в детский лепет даже на C++. \\r
\\r
Вы не путаете бизнес-логику (business logic) с моделью предметной области (stakeholder\\\'s view / universe of discourse)? Это разные вещи. Бизнес-логика (БЛ) - некий набор правил или регламентов бизнес-процессов, к-рый "подразумевает" предметную область, т.е это может быть больше, чем ее модель, которая представляет лишь точки зрения бизнес-пользователей на структуру и поведение данных. Вот простая аналогия, например, уже в реализации: модель данных (реляционная), описывающая предметную область -И- набор любых инструкцй DDL, реализующих БЛ на множестве реляционных объектов (таблицы, домены и т.д).\\r
Конечно, сложно придумать такую предметную проблему (бизнес-логика + предметная область), чтобы ее было невозможно смоделирвать/описать с помощью ОО-подхода (ООАП/UML, C++ и т.д). Однако даже БЛ может быть настолько сложной, что могучие и удобные возможности С++ покажутся просто жалкими. Следует еще учесть, что конечная цель разработчиков - это не моделирование или описание предметной проблемы на чем-то, а создание приложения , которое будет не только адекватно что-то отражать (предметную область или БЛ), но еще и будет качественным , т.е быстрым, надежным, удобным и т.д и т.п\\r
К сожалению явных и внятных определений предметной области я не нашел, но вот несколько определений БЛ или бизнес-правил:\\r
\\r
business rules (Microsoft / MSDN Glossary)\\r
The laws, regulations, policies, and procedures that are encoded into\\r
a computer system. Also known as business logic .\\r
-or-\\r
The combination of validation edits, logon verifications, database lookups,\\r
policies, and algorithmic transformations that constitute an enterprise\\\'s\\r
way of doing business. Also known as business logic.\\r
\\r
business rule (Rational / RUP Glossary)\\r
A declaration of policy or condition that must be satisfied within\\r
the business.\\r
\\r
business logic (IBM / WebSphere Glossary)\\r
The codified procedures in a business software system that implements\\r
an organization’s day-to-day operations (such as processing an order,\\r
payroll management, and so on).\\r
Business logic typically includes industry-standard procedures\\r
for business operations and customizations reflecting an organization’s\\r
unique business policies.\\r
\\r
business logic (Sun / J2EE Glossary)\\r
The code that implements the functionality of an application. In the\\r
Enterprise JavaBeans model, this logic is implemented by the methods\\r
of an enterprise bean.\\r
business method \\r
A method of an enterprise bean that implements the business logic\\r
or rules of an application.\\r
\\r
А если проектировать по-старому, отталкиваясь именно от структуры DB, то клиент оперирует разве что такими понятиями, как рекордсет, поля и пр. \\r
Т.е. безо всякой типизации и намека на ООП.\\r
...\\r
Как это хранить по-человечески в базе? Перепробовал кучу способов. ....
\\r
\\r
Как уже писал "Cat2" вас волнует неидеальность "инструментов" для описания предметной области. Она многих "волнует" и смущает, но главное чтобы она не мешала грамотному проектированию. Проектировать приложение от данных неправильно , а поэтому я бы вам не советовал доверять "Cat2" на слово, т.к он явный апологет проектирования "от данных". Для разработки даже самых сложных бизнес-приложений ООАП подход, во-первых, уже доказал свою большую эффективность по сравнению со структурным подходом, а, во-вторых, опускаться до структурного подхода да и еще неправильного ("от данных") сегодня просто неоправданно, неэффективно и чревато последствиями. Модель данных (реляционная/ОО) должна закономерно получаться в процессе проектирования, т.е из системных вариантов использования (system use case/SUC), если вы используете ООАП, например, тот же урезанный RUP. Принимать решение, какой тип архитектуры или платформу выбирать можно только после того как вы соберете нефункциональные требования и получите модель проектирования (design model)\\r
\\r
Как связать типизацию и графоподобную структуру ООП объектов с плоскими таблицами? \\r
\\r
Прочтите пару-тройку полезных и неглупых книжек на эту тему, например (тем более стоят они почти копейки):\\r
\\r
Лешек А. Мацяшек. Анализ требований и проектирование систем.\\r
Разработка информационных систем с использованием UML.
\\r
– М.: «Вильямс», 2002. – 432 с. (ISBN 5-845-90276-2, м/о, цена: 256 р.)\\r
- отличная и общая книжка по архитектуре, системному проектированию и ОО-подходу,\\r
но те же недостатки, что и у Лармана
\\r

Ларман К. Применение UML и шаблонов проектирования.\\r
(Введение в объектно-ориентированный анализ и проектирование).
\\r
– М.: «Вильямс», 2002. – 624 с. (ISBN: 5-845-90250-9, т/о, цена: 236 р.)\\r
- отличная книжка по архитектурным шаблонам, использованию MVC/4+1, моделированию\\r
предметной области, хотя и криво переведена, а автор типичный программист и несколько\\r
лось по части получения требований и построению модели SUC
\\r

Нейбург Э., Максимчук Р. Проектирование баз данных с помощью UML. \\r
– М.: «Вильямс», 2002. – 288 с. (ISBN: 5-8459-0355-6, м/о, цена: 150 р.)\\r
- отличная книжка, название говорит за себя, подробно рассматривается бизнес-моделирование,\\r
переход от BUC и SUC к архитектуре, есть примеры, хотя и криво переведена
\\r

Роберт Дж. Мюллер. Базы данных и UML. Проектирование. \\r
– М.: «Лори», 2002. – 420 с. (ISBN: 5-85582-168-4, м/о, цена: 328 р.)\\r
- дороговата, хотя то же, что и книга Нейбурга-Максимчука, но более богата примерами \\r

Антон Элиенс. Принципы объектно-ориентированной разработки программ. \\r
– М.: «Вильямс», 2002. – 496 с. (ISBN: 5-8459-0233-9, т/о, Цена: 169 р.)\\r
- отлично рассказывается про достоинтсва/недостатки ОО-языков/подходов, дается\\r
их сравнение со структурными, но автор явно отстал от жизни по части бизнес-анализа
\\r
\\r
((я также планирую выложиь полный список полезной лит-ры по ООАП и проектированию ПО с кратким обзором в топик Обсуждение и Вопросы по ОБЪЕКТНО-ОРИЕНТИРОВАННЫМ МЕТОДАМ (ООАП / OOAD) и UML)) Просто не хочется рассказывать лекцию, когда есть уже написанные книжки. Попробуйте также поискать в Инете по следующим ключевым словам и их комбинациям: data, aware, database, class, recordset, connection. И найдете множество статей и примеров кода на VB и С++, например, на том же www.planet-source-code.com в разделе Databases/ Data Access/ DAO/ ADO или Object Oriented Programming (OOP) \\r
\\r
Да, нам предрекают тут во всяких манифестах светлое иерархическое будущее взамен реляционного настоящего... \\r
А сейчас-то что делать?
\\r
\\r
Много чего нам обещали, обещают и будут обещать те, кому это нужно - обещать. Такая уж задача у зазывал. Задача же грамотного разработчика - использовать самые лучшие и доступные ему инструменты для того чтобы вести грамотную и по возможности эффективную разработку с помощью современных и проверенных на сегодня ИТ-технологий\\r
\\r
Это после того как я столько времени приучался не думать на SQL а заставлял себя думать на ООП? \\r
\\r
Я бы так перефразировал "Cat2":\\r
Мой главный совет: Прекратите думать на С++, когда пишете на SQL! И не думайте на SQL, когда пишете на C++! \\r
И еще: не думайте объектно, когда работаете с реляционной моделью, а также не думайте реляционно, когда работаете с ОО моделью.
\\r
\\r
Беда в том, что большинство современных БД приложений, мягко говоря, слабоваты. Полностью красиво запихнуть логику на сервер БД не получается (я использую MS SQL, оракловцам чуть легче). Так что прилично приходится набрасывать кода на клиенте или сервере приложений. \\r
\\r
Еще легче тем, кто работает с Cache\\\'. Однако, когда дело доходит до репликации или других естественных вещей, к-рые встроены в распространенные реляционные СУБД, но к-рых нет у Cache\\\' возникают трудности. Этот топик вы, конечно, читали: Сравнение объектно-ориентированных, реляционных и объектно-реляционных СУБД\\r
\\r
1. Entity engin - использует БД как просто место хранения состояний объектов. О таких вещах, как ограничение целостности, речь не идет. Мощь встроенных инструментов БД практически не используется. Зато очень удобно проектировать бизнесс-логику произвольного уровня сложности. \\r
\\r
А что такое "Entity engin" по сути? К своему, наверное, стыду много раз слышал этот термин, но не представляю, что это такое. И почему там "очень удобно проектировать бизнесс-логику произвольного уровня сложности"? Кстати, на чем там ее проектируют?\\r
\\r
3. Смешанный тип - часто используется в 3-х звенке. Что удобно вычислять на сервере БД - вычисляют на БД, что не удобно - то на сервере приложений. .... \\r
\\r
Пожалуй это (т.е 3-звенный и выше) эффективный тип архитектуры для построения больших, распределенных и масштабируемых приложений и Майкрософт тут не причем. Это как бы мнение (объективное) признаных авторитетов в программной инженерии и в проектирования архитектуры, например, тех же Ф.Кратчена и Г.Буча. Однако, следует опять руководствоваться здравым смыслом. Немного обсуждения есть в топике С чего начать изучение трехзвенки ? и Унифицированные методы - общий вопрос построения. Проблемы авторов топиков в чем-то схожи с вашей\\r
\\r
В жертву приносятся драгоценные часы работы разработчика, корпящего над очередным велосипедом. Фигня вся эта "бизнес-логика", ненавижу! Хочу тратить на ЭТО как можно меньше времени. ..... \\r
\\r
Это для вас она фигня (и может это правильно), а для заказчика это вовсе не фигня. И потом, если вы - программист, то какого лешего вы занимаетесь получением требований и моделированием предметной области тем более мысля при этом как программист? Вообще это задача аналитика(-проектировщика) , если все делать по уму, а не через Ж. Программист должен писать код уже по готовой спецификации, например, той же архитектуры
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32235997
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Практически нечего ответить (впервые за мой недолгий стаж на SQL.RU), но оставлять такой качественный пост без ответа невежливо, так что - по мелочам:

Вы не путаете бизнес-логику (business logic) с моделью предметной области (stakeholder's view / universe of discourse)? Это разные вещи
Будем считать, что пользовался сленгом, т.к. в наших программах мы довольно четко отделяем вещи общего плана (разработка визуальных контролов, базовых классов для форм, кэшей и "движков" для метаданных, работа с сетевыми протоколами и и database-connections и пр.), от некой специфики конкретной задачи (TOR, конкретные алгоритмы по обработке, валидации, и т.д. и т.д.).
Все, что прямо или косвено относиться ко второй приведенной выше "сущности", мы обычно называем бизнесс-логикой (в рамках именно программы), хотя, разумеется, это понятие далеко от того, что в него вкладывает заказчик.

При таком подходе, любая самая навороченная бизнес логика превращается в детский лепет даже на C++.
Скажем так, реализация специфированных бизнес логикой правил, алгоритмов, ... превращается в детский лепет, ессно саму бизнесс-логику никто не упрощает, ибо это то, что дано "свыше".

И еще: не думайте объектно, когда работаете с реляционной моделью, а также не думайте реляционно, когда работаете с ОО моделью.
Разумеется, а как же иначе. Именно это и явилось причиной задасться вопросом сабжа. В условиях небольшой (но, поверьте, весьма эффективной) команды, само такое частое переключение дорогого стоит. Ибо, для того, чтобы полностью и качественно сосредоточиться на другом подходе, порой требуются дни (!!! подозреваю, что найдутся остряки на эту фразу, ну да бог с ними), ибо практически надо стать другим человеком. Когда делаешь это часто - элементарно больше устаешь, чем в ситуации когда ничто не мешает тебе сосредоточиться на чем-то одном. Т.е. мысль такова - если бы удалось ПОЛНОСТЬЮ реализовать все приложение в рамках одного подхода - моя работа могла быть намного эффективнее (у меня свои мерки эффективности, так что просьба остряков не беспокоиться).

А что такое "Entity engin" по сути?
Да ничего особенного. Способ хранения состояния объектов в базе. Разработка структуры данных идет в направлении достаточночти для адекватного сохранения состояния объектов. Задача еngine - автоматизировать "подводную часть айсберга", т.е. автоматически формировать запросы на обновление или выборку данных. Этот engine оперирует с объектами и базой, опираясь на некоторые знания об самих объектах и о том, как эти объекты в базе храняться, т.е. такой подход подразумевает наличие некой мета-информации обо всем этом. Очень популярный подход в среде Java программ, я думаю также получит высокую популярность в среде .NET, из-за динамической сущности этих платформ.

И почему там "очень удобно проектировать бизнесс-логику произвольного уровня сложности"? Кстати, на чем там ее проектируют?
Во-первых, опять моя неточность в терминах, - удобно проктировать реализацию бизнесс-логики.
Во-вторых, проектируют просто иерархию классов, не особо заботясь (вернее, специально не заботясь) о таком моменте, как связка ОО модель - Рел. модель.
Очень удобно. Правда, в ущерб эффективности и т.д. (повторяюсь)

Фигня вся эта "бизнес-логика", ненавижу! Хочу тратить на ЭТО как можно меньше времени. .....
Это для вас она фигня (и может это правильно), а для заказчика это вовсе не фигня.

Дело в том, что помимо "прямого" кодирования алгоритмов по спецификации, приходиться выполнять еще массу "ритуальных приседаний" по общению с БД. Разумеется этот процесс обычно автоматизируется по-макимуму, используя максимум возможностей ООП-языков. И все же, все же..

И потом, если вы - программист, то какого лешего вы занимаетесь получением требований и моделированием предметной области тем более мысля при этом как программист? Вообще это задача аналитика(-проектировщика), если все делать по уму, а не через Ж. Программист должен писать код уже по готовой спецификации, например, той же архитектуры
Ой как спорно... Кто-нибудь видел живьем ГРАМОТНОГО проектировщика? Я видел много разных, грамотных еще не видел. Хороший программист только тогда и является хорошим программистом, если он еще и проектировщик нехилый. Время "кодеров" уже уходит. Знаю несколько хороших программистов, которые заткнут за пояс очень много проектировщиков на их же "поле". А вообще уже есть интерес и дальше общаться. После 15-го (выкладка беты), обязательно просмотрю эти книжки, дабы войти в "форму", и надеюсь еще не раз "скрестим шпажки".
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32236056
Фотография Ray D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 funikovyuri:
Правила отображения объектной модели на реляционную были еще у Буча описаны.
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32236063
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Ray D: ну и как ? Вы его используете???
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32237275
Репликант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 vdimas: \r
Скажем так, реализация специфированных бизнес логикой правил, алгоритмов, ... превращается в детский лепет, ессно саму бизнесс-логику никто не упрощает, ибо это то, что дано "свыше". \r
\r
Нет, я тоже неправильно выразился. Попробуем так: С++ пожалуй сегодня будет уже не самым удобным и эффективным языком/средством по сравнению со средствами, к-рые уже ближе к 4GL, а посравнению с интегрированными средствами разработки (например, какой-нибудь X++ или ABAP), ориентированными на конкретную бизнес-среду он будет вообще очень неудобным и неэффективным. При этом я нисколько не умаляю очевидных возможностей С++ просто дело в условиях, к-рые сегодея поставлены перед разработчиком\r
\r
В условиях небольшой (но, поверьте, весьма эффективной) команды, само такое частое переключение дорогого стоит. Ибо, для того, чтобы полностью и качественно сосредоточиться на другом подходе, порой требуются дни (!!! подозреваю, что найдутся остряки на эту фразу, ну да бог с ними), ибо практически надо стать другим человеком. Когда делаешь это часто - элементарно больше устаешь, чем в ситуации когда ничто не мешает тебе сосредоточиться на чем-то одном. \r
\r
Согласен. Вы далеко не первый, кто это утверждает. Хотя я как-то взял себе моду (может дурацкую?) утверждать, что это полезно для мозгов и развивает гибкость мышления - периодически переключаться с ОО на реляционную модель и наоборот. Не знаю, вспоминая свою фрилансерную вольную молодость (96-99 гг), когда ежедневно писал то на VС++, то на TSQL, то проектировал модель данных, то - классы с GUI. Как-то нормально было, основная проблема была в другом - найти того, кто предложит проект по-серьезнее с большими деньгами. Не знаю, может все дело в конкретном человеке? :о)\r
\r
Т.е. мысль такова - если бы удалось ПОЛНОСТЬЮ реализовать все приложение в рамках одного подхода - моя работа могла быть намного эффективнее (у меня свои мерки эффективности, так что просьба остряков не беспокоиться). \r
\r
Это не так просто. Придется либо переходить на средство более близкое к 4GL, не пользоваться же каким-нибудь убогим гибридом типа ESQL/C. Вы на C++ пишете, а это вообще адский труд (сам знаю). Переходите уж на Delphi 7 или PowerBuilder9. IMHO их возможности и преимущества очевидны. Хотя, конечно, стоят они недешево\r
\r
Задача еngine - автоматизировать "подводную часть айсберга", т.е. автоматически формировать запросы на обновление или выборку данных. Этот engine оперирует с объектами и базой, опираясь на некоторые знания об самих объектах и о том, как эти объекты в базе храняться, т.е. такой подход подразумевает наличие некой мета-информации обо всем этом. .... \r
\r
Под этим имелся в виду просто промежуточный "слой" в РСУБД, к-рый обсуждался в Объектно-ориентированная система управления реляциоными базами данных или здесь или что-то более "интеллектуальное" наподобии UDDI/ebXML (или что-то наподобии управления знаниями (KM) хотя это наврядли), когда не знаешь "кто" и "как" предоставляет сервис/хранит данные, но знаешь только "что" хочется от него и "какие" данные нужнны?\r
\r
Во-вторых, проектируют просто иерархию классов, не особо заботясь (вернее, специально не заботясь) о таком моменте, как связка ОО модель - Рел. модель. \r
Очень удобно. Правда, в ущерб эффективности и т.д. (повторяюсь)
\r
\r
Cпасибо, я понял идею. Просто я думал, что есть какие-то серьезные коммерческие продукты, снабженные удобными средствами проектирования. Т.е они есть и я знаю пару-тройку таких что-то типа визуального конструктора (пост от Дата: 5 дек 02, 19:56), к-рый позволяет конструировать бизнес-операции и бизнес-объекты, к-рые потом отображаются, например, в объекты Cache\' и проект Delphi соответственно, но я не уверен, что это именно средства как в категории продуктов "Entity enginе" или нет?\r
\r
Дело в том, что помимо "прямого" кодирования алгоритмов по спецификации, приходиться выполнять еще массу "ритуальных приседаний" по общению с БД. Разумеется этот процесс обычно автоматизируется по-макимуму, используя максимум возможностей ООП-языков. И все же, все же.. \r
\r
Не совсем понял, что именно имеется в виду. Ведь есть же классы соединений (см. ссылки в моем предыдущем посте выше), есть архитектурные шаблоны. В книжках, посвященных Delphi & VB БД-приложениям это все описано как должно "жить" соединение в приложении. Можно пообсуждать конкретные архитектурные вопросы про соединения и, например, без привязки к конкретному ОО языку\r
\r
Ой как спорно... Кто-нибудь видел живьем ГРАМОТНОГО проектировщика? Я видел много разных, грамотных еще не видел. \r
\r
Не хочу показаться нескромным, но я видел и вижу постоянно, например, когда пиво с ними выпиваю. Я лично знаю нескольких людей в г.Москва, которые мыслят основательно именно как системные аналитики и проектировщики. Себя я из скромности не упомянаю. Хотя в смысле уровня все, конечно, относительно . Я, например, полный нуль по части RT-систем (очень перспективный рынок труда для проектировщиков в России и в США, кстати, на к-рый мне, например, только слюни остается пускать!), т.е какие-то общие знания есть, но не более; также и по части J2EE/CORBA с трудом представляю как там вся эта связка фурычит. Получается, что я уже неграмотный или какой-то "узкий" что ли? Не думаю. Просто моя специализация - это "ширпотребовская" платформа Windows/Office с MSSQL/Access, IIS/BizTalk/CS, ActiveX/COM/Net и т.д все, что с ними связано. Но все задачи решаю именно инженерным образом, а не кустарным. Да, иногда приходится кое-что делать не совсем грамотно, интуитивно, т.к время и человеческие ресурсы бывает ограничены и даже попустительствовать заказчику в его явных глупостях. Главное чтобы генеральная линия оставалась верной. Вот и делайте выводы "ху из ху", как говорится :о)\r
\r
.. Хороший программист только тогда и является хорошим программистом, если он еще и проектировщик нехилый. Время "кодеров" уже уходит. \r
\r
Если объективно, то вы ошибаетесь насчет кодеров. Возможно вы судите по России или по Rentacoder.com c Sourceforge.net. Но на Западе (я не беру в расчет конторы где <20 человек) да и в крупных российских компаниях уже давно поняли и приняли инженерный подход , т.е отделили роли программистов от проектировщиков с аналитиками. Более того даже люди и департаменты разные, чтобы одни не воздействовали на других. Что же касается программиста - его задача программировать , а не проектировать или рисовать модель GUI. Однако, я согласен, что программист должен иметь однозначное с проектировщиком понимание общих для них вещей: методологические принципы, нотация для моделирования, специфика платформы и т.д\r
\r
.. Знаю несколько хороших программистов, которые заткнут за пояс очень много проектировщиков на их же "поле". \r
\r
Почему бы и нет, если те проектировщики были неграмотными или неопытными? На таких не стоит равняться. Я знаю проектировщиков, к-рые заткнут за пояс любого молодого и даже грамотного программиста. Это я к тому, что я тоже бывший программер\r
\r
.. А вообще уже есть интерес и дальше общаться. После 15-го (выкладка беты), обязательно просмотрю эти книжки, дабы войти в "форму", и надеюсь еще не раз "скрестим шпажки". \r
\r
Почему бы и нет? Я всегда готов к дуэли лишь восторжествовала объективная истина и кому-то это пошло на пользу. Если будет время, то прочтите на досуге топики (просто легкое чтение) по теме разделения труда и специализации: Перспективы свободных художников в Москве (стр.2-4) и Все мы чего-то автоматизируем. Желаю успехов в сдаче беты! :о)
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32237293
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Беда-беда :) Ну какая же инерция мышелния :)\r
\r
Категорически протестую!!!, Объектно-ориентированную систему управления реляциоными базами данных не надо расматривать только как промежуточный слой! То есть конечно он будет реализован как промежуточный слой, но в результате мы получим среду, которая на стороне сервера \r
1)позволяет полностью(! не хуже чем...ну ... усредненный ОО язык из современных...) описывать моделируемую предметной область\r
2)осуществляет долговременное и согласованное (в соответсвии с описанием) хранения объектов данных\r
3)позволяет организовать доступ (в том числе групповой) к этим объектам данных ....и к данным этих объектов :)\r
(....и никаких классов соединений в этом описании в принципе присутсвовать не будет) \r
\r
То есть это именно то, что vdimas хочет с самого начала :).\r
\r
И потом. Ну почему же так категорично "Проектировать приложение от данных неправильно" . Почему бы не сказать, что "Проектировать приложение только от данных неправильно". В связи с этим, хочу задать вопрос. Когда вы будете проектировать, ну скажем, класс "Поставка", этот класс в том или ином виде будет содержать заголовок поставки(номер,дата) и данные о элементах поставки(артикул, штуки), представленных в виде массива (или набора или что-то еще повторяющееся) структур (или объектов или чего-то еще). И вряд ли Вы поместите данные о заголовке (например "дата поставки") рядом с артикулом. Скажите, почему Вы так сделаете?\r
\r
Только надо меня правильно понимать. Я ни в коем случае не против ООАП. Но ИМХО проектирвать навстречу от предметной области и от данных. Грамотный анализ предметной области, ее правильное описание в виде наборов взаимосвязанных классов и представление в виде набора взаимосвязанных объектов - это святое. Но ведь снизу то у нас некая есть система хранения данных. И даже в сегодняшних системах с их "классами соединений" (я здесь уж и не говорю про ООСУРБД:) данные долговременно храняться в БД (в ООСУРБД они там еще и обрабатываются в в соответсвии с описанием классов). Поэтому ИМХО порядок проектирования (объекты -> их атрибуты -> как хранить в РБД) все же стоило бы поменять на (объекты->их атрибуты <- как хранить в РБД).
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32238486
Репликант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 U-gene: \\r
Категорически протестую!!!, Объектно-ориентированную систему управления реляциоными базами данных не надо расматривать только как промежуточный слой! \\r
\\r
Просто ради справедливости: я по-мойму и не заикался даже, что ООСУРБД - это только промежуточный слой или что он якобы такой же "убогий" по функциональности как, например, Тенцера. Так при чем здесь "Беда-беда" и т.д?\\r
\\r
То есть конечно он будет реализован как промежуточный слой, но в результате мы получим среду, которая на стороне сервера \\r
\\r
Собственно это я и утверждал, не более\\r
\\r
1)позволяет полностью(! не хуже чем...ну ... усредненный ОО язык из современных...) описывать моделируемую предметной область \\r
\\r
Просто ради ясности ИТ-языка лучше сказать так: "предоставляет возможности для полного описания предметной области (почти любой сложности)" потому что сама по себе ООСУРБД не позволяет или не определяет полноту. Ее определяет тот, кто выполняет моделирование\\r
\\r
3)позволяет организовать доступ (в том числе групповой) к этим объектам данных ....и к данным этих объектов :) \\r
(....и никаких классов соединений в этом описании в принципе присутсвовать не будет)
\\r
\\r
Я думаю, что "vdimas" уже понял это и оценил перспективные возможности ООСУРБД :о)\\r
\\r
И потом. Ну почему же так категорично "Проектировать приложение от данных неправильно". Почему бы не сказать, что "Проектировать приложение только от данных неправильно". \\r
\\r
Хм, ну если проектировать приложение от данных неправильно, то проектировать приложение только от данных тем более неправильно. Имелось в виду именно проектирование приложения в целом , а не БД. При создании приложения, например, на этапе сбора и анализа требований (функциональных или UC) отталкиваются прежде всего от того "ЧТО ДЕЛАТЬ" приложению, а не "ЧТО ХРАНИТЬ" или какими данными будет оперировать приложение. Конечно, анализ предметной области ("ЧТО ХРАНИТЬ") никуда не исчезает и имеет такое же важное значение. То же самое и на этапе проектирования: статическая модель данных точно также важна. При этом не важно используются структурный или ОО подходы, т.е именно такая приоритетность функциональности над данными более правильная (корректная и т.д). Вот что имелось в виду под "проектировать приложение от данных неправильно". Кстати, неправильно и проектировать приложение от пользовательского интерфейса хотя учитывать и проектировать его также необходимо\\r
\\r
... В связи с этим, хочу задать вопрос. Когда вы будете проектировать, ну скажем, класс "Поставка", этот класс в том или ином виде будет содержать заголовок поставки(номер,дата) и данные о элементах поставки(артикул, штуки), представленных в виде массива (или набора или что-то еще повторяющееся) структур (или объектов или чего-то еще). И вряд ли Вы поместите данные о заголовке (например "дата поставки") рядом с артикулом. Скажите, почему Вы так сделаете? \\r
\\r
Есть (а) проектирование всего приложения, а есть (б) моделирование данных или проектирование БД. (б) - это подзадача (а), в к-рой используются свои подходы и технологии, ориентированные на решение именно этой подзадачи. А поскольку ваш вопрос относится к подзадаче (б), то и решается он соответсвенно более "узкими" методами (анализ зависимостей, избыточности, нормализацией, денормализацией и т.д)\\r
\\r
.. Грамотный анализ предметной области, ее правильное описание в виде наборов взаимосвязанных классов и представление в виде набора взаимосвязанных объектов - это святое. Но ведь снизу то у нас некая есть система хранения данных. \\r
\\r
C этим никто и не спорит! Подзадачу анализа и моделирования предметной области с проектированием БД также надо решать грамотно и полно
...
Рейтинг: 0 / 0
Раздвоение личности или "а сейчас-то что делать?"
    #32240972
2 vdimas

Относительно схем хранения скажу, что неразумно привязываться к единственному способу отображения структуры классов на РСУБД. Их должно быть несколько: для агрегативной связи своя, для наследования - своя, для ассоциативной связи - несколько своих (для: 1:1, 1:n, m:n) и т.п. Причина здесь как минимум в том, что трудно предсказать схему хранения, которая в процессе эксплуатации окажется наиболее адекватной с точки зрения производительности.

Так что, ИМХО, ты совершенно прав, что проектируешь, отталкиваясь от объектной а не реляционной декомпозиции. В сущности, БД - это только хранилище и, ИМХО, именно так к нему и следует относиться. Сегодня одно, завтра другое, послезавтра - третье. Это же касается и всего прочего: способов визуализации, коммуникации, используемых операционных систем и пр. Но это уже оффтопик.

Более того, структура БД в идеале должна подстраиваться "на ходу", требуя как максимум, остановки сервера для реструктурирования, без перетрансляции приложения.

Ну не хочу я в классе Документ держать поле Кому_ID, я хочу держать там просто ссылку Кому на базовый класс Субъект, а уже у того брать ID

Правильно, что не хочешь. Это решается механизмом ленивых ссылок (lazy references), который ты же сам и описал и средствами объектно-реляционного отображения.

Блин, но КАКОЙ ЭТО ВСЕ НАВОРОТ получился. Прямо как доказательство того, что современное ООП ну никак не хочет подружиться со старой доброй реляционной моделью. (по которой так удобно делать мудренные и быстрые выборки :) )

ИМХО, нет здесь никакого особенного наворота: всё совершенно нормально. И эффект снижения трафика "БД <-> Приложение", отмеченный тобой как неожиданный - вполне закономерен и скажу больше, на его использование стОит закладываться при проектировании.

У РСУБД на сегодняшний день есть пара больших положительных качеств: а) сложившийся рынок (РСУБД много, разных, с развитыми средствами коммуникации) и б) у РСУБД высокое быстродействие. Так что, на мой взгляд, выбор именно объектно-реляционной модели реализации для большой системы - правильное решение.

PS И ни в коем случае не начинай снова "думать на SQL". :)
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Раздвоение личности или "а сейчас-то что делать?"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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