|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
VladiChГоспода Один1, tygra, Old Nick и ASCRUS, вы все говорите правильно, но возражаете на те заявления, которых здесь не было. Разговор вообще о другом идет. Никто не спорит, что работа с множествами должна вестись на SQL-сервере. Где вы видели обратное утверждение - ткните пальцем пожалуйста... Речь идет о том, что эту бизнес-логику удобнее всего структурировать по ООП-принципам, что сделать в базе данных если и можно, о чем здесь говорил Old Nick, то честно говоря через одно место. Так мы и просим: покажите, с чего бы это бизнес-логику удобнее структурировать по ООП-принципам ??? Кто вам сказал, что это так? Что вы именуете бизнес-логикой? Пробовали вы реализовать ее хоть раз в СУБД, только правильно, а не с позиций ООП? Я же писал: непонятно, зачем вы себе усложняете жизнь?! Приведите пример, объяснения. Мы приведем пример того же, но со стороны СУБД. Иначе совершенно непонятно, на кой вам ООП для данных и БЛ? авторСУБД для этого не предназначена, так же как и ООП не предназначено для работы с множествами. Я не спорю, что сделать эмуляцию ООП на процедурном языке, предназначенном для работы с множествами можно, только зачем? Это будет криво и неудобно. Вот мне не нужны данные, структурированные по ООП принципам - они сделают только хуже, как не нужно и все другое, ООП-овидное в вашем смысле, на стороне СУБД. А вам зачем? авторЯ соглашусь - большая часть бизнес-логики реализуется именно в БД (не вся). Но клиент работает с этой бизнес-логикой через объектную прослойку, а не через запросы и рекордсеты. Сервер приложений в данном случае выполняет вспомогательные функции, но это все же не провайдер доступа к СУБД через интернет, не надо утрировать. Объектная прослойка - это ведь не просто обертка, через которую выполняются CRUD-операции над таблицей. Ее функции могут быть гораздо шире. Зачем оно вам вне СУБД? авторДоводы за СП - вынести часть работы, общую для всех клиентов, например кэширование, зависящее от логики приложения (не единственный пример). У вас с этим проблемы, из-за которых приходится выносить? СУБД что, уже не справляется? ----------- VoDA PS обработкой я называю любые изменения в данных, т.е. получил xml на вход изменил/преобразовал данные и отправил дальше и/или инициировал другое(ие) действия (драйвера на изменяют данных, а преобразуют форму их представления). СП - тогда это та программа, которая эти изменения производит. Так вот и определитесь - если есть какая-то обработка, изменяющая данные, то это СП. Если есть обработка, преобразующая данные в другой вид - это драйвер. Вебсервис, который получает что-то, идет в БД, дергает ХП, получает результат, отдает что-то и на этом его работа заканчивается (ну примерно так) - это большой драйвер доступа к БД. -- Tygra's -- ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 14:30 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
tygraТак вот и определитесь - если есть какая-то обработка, изменяющая данные, то это СП. Если есть обработка, преобразующая данные в другой вид - это драйвер. Вебсервис, который получает что-то, идет в БД, дергает ХП, получает результат, отдает что-то и на этом его работа заканчивается (ну примерно так) - это большой драйвер доступа к БД. -- Tygra's --То есть получается (к примеру) веб сервис построенный на J2EE с использованием JBoss и сервлетов под Tomcat - является драйвером , а сам JBoss - перестает быть сервером приложений? Разговор становится интереснее с каждым постом. ---- SAnalis.ru - Just for fun. Еще расту, а так я ДЖИП! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 15:18 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
tygraТак мы и просим: покажите, с чего бы это бизнес-логику удобнее структурировать по ООП-принципам ??? Кто вам сказал, что это так? Самый простой пример. Ну к примеру, существует сущность "товар". Существуют правила ценообразования для товара. Существует также несколько сущностей, унаследованных от "товара" как на уровне таблиц, так и на уровне классов бизнес-логики. На уровне таблиц наследование осуществляется отношением 1:1. Для этих унаследованных сущностей переопределены правила ценообразования, также добавлено несколько дополнительных атрибутов. На уровне клиенте я могу работать со всеми этими сущностями как с "товаром", менять их атрибуты и т.п. Правила ценообразования задаются формулами, которые могут транслироваться в выражения SQL, можно сказать, что логика ценообразования в результате работает в СУБД, но для того чтобы это было так, промежуточный слой должен довольно много телодвижений сделать. К примеру, я просто выбираю все "товары", в том числе и унаследованные. Выражение для выборки строится наполовину в промежуточном слое, наполовину в СУБД, т.к. логика построения такого выражения достаточно сложная, а язык СУБД для этого очень слабо приспособлен. Есть свой язык для выборки объектов + набор универсальных хранимых процедур, в которые передаются "полураспарсенные" конструкции этого языка. Этими несколькими хранимыми процедурами генерится динамический SQL для выборки коллекции объектов. Обработка результата тоже производтся в промежуточном слое, на выходе получается коллекция объектов класса "Товар". Для каждой сущности определен набор операций, на операции завязана система security. На базовую сущность Entity завязаны права на выборку, чтение, создание, модификацию, удаление, редактирование прав, которые соответствуют различным операциям над этой сущностью. Операции наследуются точно также как на уровне СУБД, так и на уровне классов. Т.е. все унаследованные сущности будут иметь тот же набор операций, что и Entity + могут задаваться свои. В результате при добавлении любых новых систем ценообразования, любых специфических типов товаров, в клиентский код, который работал с коллекциями товаров не прийдется вносить никаких изменений. tygraУ вас с этим проблемы, из-за которых приходится выносить? СУБД что, уже не справляется? Разумеется. У меня логика кэширования зависит от логики приложения, а не от логики СУБД. tygraВот мне не нужны данные, структурированные по ООП принципам - они сделают только хуже, как не нужно и все другое, ООП-овидное в вашем смысле, на стороне СУБД. А вам зачем? А у меня структурируются не только данные, но и операции над объектами, как я описал выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 15:27 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Мне кажется, tygra сформулировал суть достаточно четко и верно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 15:29 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
авторВыражение для выборки строится наполовину в промежуточном слое, наполовину в СУБД, т.к. логика построения такого выражения достаточно сложная, а язык СУБД для этого очень слабо приспособлен. Да ну... Ну что нельзя сделать в MS SQL Server? Чур решения дифф. уравнений не предлагать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 15:31 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
авторДа ну... Ну что нельзя сделать в MS SQL Server? Чур решения дифф. уравнений не предлагать :) Парсер своего языка запросов оччень я бы сказал проблематично построить. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 15:35 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Да, с парсером согласен. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 15:41 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Что скажет Тигра в ответ на парсер? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 15:41 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
tygraДоводы за катастрофическое усложнение системы путем добавления звеньев, оберток и т.д.? Никто не хочет доводы показать - "за СП" и все. Нет чтоли чего сказать? Тебе их показывали - ты их не хочешь вопринимать. Сразу видно - со школьной скамьи с турбо паскаля перелез на SQL, не сделав ни одного грамотного проекта с использованием ООП. Усложнение не катастрофическое. Делается ОДИН раз. Дальше СП работает сам по себе. Очень легко менять бизнес-логику. tygraПробовали вы реализовать ее хоть раз в СУБД, только правильно, а не с позиций ООП? В этом-то вся и проблема. Почему ты решил, что логика правильная только на СУБД? Где это написано? Правда-то у всех своя. Работает у тебя логика на СУБД? Отлично, ты прав! Работает у других на СП? Отлично, и они правы! Если кому не сложно поделиться достижениями в проектировании серверов приложений - всегда рад прочесть. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 15:43 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
VladiCh авторДа ну... Ну что нельзя сделать в MS SQL Server? Чур решения дифф. уравнений не предлагать :) Парсер своего языка запросов оччень я бы сказал проблематично построить. А его и не надо строить в СУБД - уже есть готовый и мощный - это сам SQL - никто не мешает хранить ценообразование товаров в текстовом поле таблицы алгоритмов в виде готового куска батча SQL, хоть с переменными, хоть с времянками, хоть с чертом на куличках и при надобности через динамический SQL его вызывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 15:54 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
ASCRUSА его и не надо строить в СУБД - уже есть готовый и мощный - это сам SQL Так он и не строится в СУБД по причине, описанной выше - строится на промежуточном слое, в СУБД передается уже результат его работы. По поводу в принципе использования своего языка... Очень не хочется здесь всю архитектуру приложения описывать, т.к. кучу времени займет, но поверьте, одним SQL-ем здесь не обойтись... Он используется на клиенте для выборки коллекций объектов с использованием связей между сущностями. Связи также описаны в метаданных. Помимо обычных атрибутов, хранящихся в таблицах, есть т.н. "расширенные" атрибуты, хранящиеся вертикально в отдельной таблице, в принципе по ним также может осуществляться сортировка и поиск. Если это все писать на чистом SQL... Сложновато получается и непонятно, мягко говоря. На клиенте меня не интересуют таблицы и view, меня интересуют сущности в моей системе, в терминах этих сущностей и работают выборки с использованием своего языка. Да и выборки получаются не очень простые, на 2-3 рекордсета в среднем, их приведение к коллекции объектов осуществляется отдельно, поэтому сам результат выполнения SQL-выражения мне на клиенте тоже неинтересен. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 16:06 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Пример неудачный. Если у вас ценообразованием занимается метод, то привяжите к каждому типу товара метод и вызывайте его через один базовый виртуальный метод товара. Есть проблемы в реализации? Нехрен тогда спорить о плюсах и минусах. Выбрать на клиента все товары, в том числе и унаследованные? Делается не просто, а очень просто: select * from Things (если все виды товаров наследуются от одного базового, то выборку делаем из базовой таблицы) А по сути, ценообразование это список стоимостей, входящих в него составляющих. Что такое составляющие? Это сам товар, его составляющие (допустим, приход на склад в виде комплектующих, а расход со склада в виде готового компа), услуги по его продаже, услуги по его сборке, скидки на его продажу, накрутки на него, налоги на него и т.д. и т.п. И подсчет делается простым агрегирующим селектом. Не усложняйте господа, то что в мире сделано просто. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 16:17 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Old NickПример неудачный. Если у вас ценообразованием занимается метод, то привяжите к каждому типу товара метод и вызывайте его через один базовый виртуальный метод товара. Есть проблемы в реализации? Нехрен тогда спорить о плюсах и минусах. Выбрать на клиента все товары, в том числе и унаследованные? Делается не просто, а очень просто: select * from Things (если все виды товаров наследуются от одного базового, то выборку делаем из базовой таблицы) Садитесь, 2! Эти два метода неравноценны. Расскажите мне тогда немного о том, что вы понимаете под полиморфизмом. В случае такой выборки вы получите коллекцию объектов типа Товар, т.е. унаследованные товары будут без своих дополнительных атрибутов, соответственно по ним некорректно будут рассчитаны цены. Я же в своем случае получу коллекцию разнотипных объектов, типы которых унаследованы от типа "Товар", к которым буду обращаться так, как будто это объекты типа "Товар". Old NickА по сути, ценообразование это список стоимостей, входящих в него составляющих. Что такое составляющие? Это сам товар, его составляющие (допустим, приход на склад в виде комплектующих, а расход со склада в виде готового компа), услуги по его продаже, услуги по его сборке, скидки на его продажу, накрутки на него, налоги на него и т.д. и т.п. И подсчет делается простым агрегирующим селектом. Вот именно, а скидки на него начисляются в зависимости от того, какого типа товар. К разным типам товаров применимы разные типы скидок, рассчет может делаться разными способами, скидки могут суммироваться/не суммироваться и т.п. Вы предлагаете все это сделать простым аггрегирующим селектом? Ну-ну. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 16:28 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
авторОчень не хочется здесь всю архитектуру приложения описывать, т.к. кучу времени займет, но поверьте, одним SQL-ем здесь не обойтись... К сожалению не поверю, потому что у меня все замечательно обходится одним SQL, который ко всему прочему для подобных случаев строится на стороне сервера и выполняется на стороне сервера. Клиентское приложение только передает серверу, что ему нужно и получает готовый результат, даже если алгоритмы плавающие и на момент вызова клиентское приложение не знает ничего кроме инициализирующих параметров - это уже проблемы сервера и бизнес-логики, как и что будет выбираться, считаться, собираться, выполняться. Наглядный пример - у меня полностью на языке ХП реализован система фильтров, позволяющая на уровне сущностей описать запросами получение параметров обьектов в различных разрезах, с дополнительными аттрибутами, необходимыми клиентскому приложению для построения формы запроса параметров фильтрации на необходимые обьекты. Клиентское приложение заполняет своими условиями по определенным аттрибутам разрезов времянку (фактически для пользователя это выглядит как работа в списке разрезов и аттрибутов мышкой), далее вызывается ХП, которая по параметрам времянки собирает SQL запрос, со всеми подзапросами по разрезам и условиями, заданными пользователем и выполняет его. Если интересно - код такой ХП занимает ровно 83 строчки, вместе с комментариями. Ниже привожу скриншот пользовательского компонента запроса параметров фильтрации, который автоматически по указанной схеме выводит окно, заносит во времянку параметры выбора (операции и значения на указанные аттрибуты) и далее просто вызывает ХП. Где группы "Основная информация" и "Документы" - это разрезы схемы/сущности, лежащие в БД как подзапросы, а записи в группах (Тип договора, Номер договора, ...) - поля этих подзапросов, опять же лежащие в табличке и описывающие для клиентской части имя поля подзапроса, алиас, тип поля, lookup форму и запрос для lookup выбора и прочее ... P.S. Скрипты просто замечательно собираются и выполняются сервером и клиентская часть никаких затруднений для отображения универсальной формы запроса параметров фильтрации не имеет, достаточно бросить в приложение компонент и назначить ему указанную схему фильтрации. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 16:28 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
ASCRUSК сожалению не поверю, потому что у меня все замечательно обходится одним SQL То что у ВАС обходится замечательно одним SQL, не обязательно должно во всех случаях обходиться одним SQL, вам не кажется? Особенно, если учесть мягко говоря существенную разницу в архитектуре приложения. Критиковать же архитектуру не имея мало-мальских данных о самом приложении мне кажется несколько опрометчиво. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 16:32 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
ASCRUS, я верю, что вы просто виртуоз SQL и можете на нем сделать все что угодно. Я не верю в то, что методы, применяемые вами являются единственно верными в любой ситуации. Я не уверен в этом и для своих методов. А пока я в этом не уверен, я не буду всем советовать срочно начать использовать мои методы и все остальные приложения, реализованные не так подозревать в кривой архитектуре, что и всем остальным советую. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 16:38 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Ах, простите, я забыл что у вас ценообразование на клиенте происходит :-) Поясняю насчет полиморфизма. У вас есть метод задача которого для каждого экземпляра из списка товаров вызвать метод ценообразования и полученный результат записать напротив товара. Значит данный метод виртуальный и его единственная задача по идентификатору товара определить его тип, по типу найти реальный метод и вызвать его. Это можно сделать на клиенте, можно и в базе. Где быстрее будет? Или есть проблемы с созданием в реляционной базе виртуальных и перекрывающих метод? На клиенте это можно сделать двумя способами: 1. Имея список товаров (select * from Things) для каждого элемента вызвать процедуру соответствующую типу товара 2. Выгрести на клиента список всех товаров со всеми возможными атрибутами, используя для этого все возможные построители динаимческого SQL, и затем пробежать по списку посчитав для каждого экземпляра цену и затем таким же макаром сохранить это в базе. Вы какой способ выбираете? -------------------- Не учи отца и баста! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 16:44 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Я не критикую - я не верю Вашим заявлениям о том, что на SQL не реализуемо. Почувствуйте разницу. Вы говорите что нельзя, а я по своему опыту знаю, что можно, Вы приводите примеры, а я вижу что это элементарно вписывается в логику БД. Но я не заявляю, что это 3-х звенки и ООП не могут. Я заявляю, что SQL может. Однако я подчеркиваю, что раз SQL может, то на фига сдался лишний код и лишние звенья ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 16:45 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Я не говорю, что не реализуемо никогда и не прикаких обстоятельствах, я даже не говорил, что это и у меня нереализуемо. Это просто _нецелесообразно_ именно в моей архитектуре. Почуствуйте разницу. В вашей это может замечательно работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 16:48 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Old NickАх, простите, я забыл что у вас ценообразование на клиенте происходит :-) ?? Откуда вы это взяли? Old NickПоясняю насчет полиморфизма. У вас есть метод задача которого для каждого экземпляра из списка товаров вызвать метод ценообразования и полученный результат записать напротив товара. Значит данный метод виртуальный и его единственная задача по идентификатору товара определить его тип, по типу найти реальный метод и вызвать его. ?? А это откуда? Ценообразование у меня выполняется в SQL, еще в момент выборки, прочитайте внимательно еще раз . но в то же время на клиенте мне нужны полноценные объекты своих типов, а не кастрированные путем select * from Things. Old NickИли есть проблемы с созданием в реляционной базе виртуальных и перекрывающих метод? А это, извините меня, и есть то, что я называл извращением. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 16:56 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
ASCRUSНиже привожу скриншот пользовательского компонента запроса параметров фильтрации, который автоматически по указанной схеме выводит окно, заносит во времянку параметры выбора (операции и значения на указанные аттрибуты) и далее просто вызывает ХП. В этом примере я наверное тоже обошёлся бы ХП. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 16:58 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
А зачем Вам на клиенте нужны полноценные объекты? Что Вы с ними делать будете на клиенте? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:02 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
VladiCh Выражение для выборки строится наполовину в промежуточном слое, наполовину в СУБД, т.к. логика построения такого выражения достаточно сложная, а язык СУБД для этого очень слабо приспособлен. Извините, не удержался. Что для чего "слабо приспособлено"?! язык SQL для обрабтки реляционных данных?! %) Это если структуру хранения данных создать так, что он станет "слабо приспособленным". VladiCh Есть свой язык для выборки объектов + набор универсальных хранимых процедур, в которые передаются "полураспарсенные" конструкции этого языка. Этими несколькими хранимыми процедурами генерится динамический SQL для выборки коллекции объектов. Мдя... Если я вижу систему, в которой существует набор "универсальных" хранимых процедур, которые генерят DSQL, то сразу становиться понятным, что разработчик мало времени потратил именно на проектирование нормальной "структуры" хранения данных и алгоритмами ее обработки. Применение ООП на клиенте, ради бога, но не надо "извращаться" над реляционными СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:23 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Old NickА зачем Вам на клиенте нужны полноценные объекты? Что Вы с ними делать будете на клиенте? Вопрос на миллион долларов :). Вы знаете, я, как ни странно, буду вызывать их методы :). Причем у объекта типа SpecificThing1 метод ComputeSomething будет вызывать в результате хранимую процедуру p_ComputeSomething1 с передачей параметра param1, где param1 - это дополнительное свойство SpecificThing1. А у объекта SpecificThing2 метод ComputeSomething будет вызывать в результате хранимую процедуру p_ComputeSomething2 с передачей параметра param2, где param2 - это дополнительное свойство SpecificThing2. Свойства param1 и param2 выбираются из полей таблиц SpecificThing1 и SpecificThing2, т.е. в таблице Things не присутствуют. Классы SpecificThing1 и SpecificThing2 унаследованы от класса Thing, данные которого хранятся в таблице Things. А select * from Things мне в этом случае вернет нечто непонятное. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:24 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
pkarklinИзвините, не удержался. Что для чего "слабо приспособлено"?! язык SQL для обрабтки реляционных данных?! Там что-то говорилось про реляционные данные? Там говорилось про логику построения SQL-выражения из выражения на своем языке запросов. То есть по вашему SQL приспособлен для того, чтобы парсить какие-то текстовые выражения? Но я надеюсь вы этого не имели в виду, а просто невнимательно прочитали мой пост. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:27 |
|
|
start [/forum/topic.php?fid=33&msg=33317864&tid=1548944]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
110ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 288ms |
total: | 502ms |
0 / 0 |