|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
VladiChВопрос на миллион долларов :). Вы знаете, я, как ни странно, буду вызывать их методы :). Да пожалйуста, только сделайте хранилище объектов так, чтоб оно обрабатывалось не набором универсальных хп с динамикой! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:27 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Ваши предложения? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:31 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Если система велика и достаточно сложна, то быть может разработка интерпретатора (говоря по-другому,встроенного языка) для нее может быть рассмотрено, как поиск 3-го пути? PS ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:37 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
VladiChВаши предложения? Этого не хватает : pkarklinчтоб оно обрабатывалось не набором универсальных хп с динамикой ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:37 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
авторЭтого не хватает Нет, этого не хватает, т.к. вы предлагаете мне выкинуть то, что есть не предоставляя никаких аргументов в пользу этого, а не можете ответить на вопрос, что применять вместо этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:40 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
VladiCh авторЭтого не хватает Нет, этого не хватает, т.к. вы предлагаете мне выкинуть то, что есть не предоставляя никаких аргументов в пользу этого, а не можете ответить на вопрос, что применять вместо этого. Какие аргументы Вам нужны?! То, что у меня клиент оперирует Объектом Документ в терминах ООП, а обработка в бд ведеться хранимыми процедурами без динамики. Вам привести исходники клиента и бд?! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:41 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Тут просто обсуждение идет уже достаточно давно и чтобы вникнуть в суть надо предудущие несколько страниц прочитать :) Иначе все опять будет идти по кругу. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:42 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
pkarklinКакие аргументы Вам нужны?! То, что у меня клиент оперирует Объектом Документ в терминах ООП, а обработка в бд ведеться хранимыми процедурами без динамики. Вам привести исходники клиента и бд?! Да я верю что у вас это делается. Как вы производте выборку этих объектов типа Документ? Тоже хранимой процедурой? А на каждый новый тип объекта создаете новые хранимые процедуры для выборки? И в каждой такой процедуре проверяете например права на выборку определенных объектов? Или такие права у вас проверяются на клиенте? А при изменении набора хранимых атрибутов объекта переписываете эти хранимые процедуры? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:45 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
VladiChТут просто обсуждение идет уже достаточно давно и чтобы вникнуть в суть надо предудущие несколько страниц прочитать :) Иначе все опять будет идти по кругу. Т.е. Вы считаете, что я начал читать с конца?! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:46 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Мне кажется, что введение интерпретатора способно примирить многое, особенно в плане производительности; скажем, сразу же формируем требования к некоторой специфике, когда именно, в каких случаях нужно снабжать (и какие именно) объекты нашего интерпретатора префиксами Client.Variable1, Server.Function1 и т.д. Т.е. пусть все остается на своих местах: Серверу - серверово, а клиенту - клиентское. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:47 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
И все-таки, Вы не ответили на вопрос, зачем Вам на клиенте полноценные объекты? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:52 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
авторИ все-таки, Вы не ответили на вопрос, зачем Вам на клиенте полноценные объекты? Вы что, издеваетесь? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:54 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
По-моему в процедуру достаточно передать в качестве параметра идентификатор объекта, а процедура в базе найдет те необходимые доп параметры, которые Вы вытащили на клиента. -------------------- Не учи отца и баста! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:56 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
VladiChКак вы производте выборку этих объектов типа Документ? Тоже хранимой процедурой? У меня все делается через хп! VladiChА на каждый новый тип объекта создаете новые хранимые процедуры для выборки? Да. Ибо так и только так можно добиться максимального быстродействия каждой хп в отдельности, включая в обработку в ней только нужные ей таблицы. А вот какую хп вызывать (какой префикс типа документа к "глобальному" названию дописывать) определяет клиент. И если такой процедуры нет, то метод Open, вызыванный на клиенте выдает сообщение "Документ не реализован". VladiChИ в каждой такой процедуре проверяете например права на выборку определенных объектов? Или такие права у вас проверяются на клиенте? Уу... Разграничение прав доступа - это отдельная пестня. И, естественно, это делается не на клиенте. Каждый документ имеет ранг доступности (общедоступный, секретный и т.п.). Для каждой роли определен ранг, документы с которым и "ниже" член роли может иметь право видеть. Кроме того, существуют дополнительные ограничения на права редактирования видимых документов. Долго можно расказывать... VladiChА при изменении набора хранимых атрибутов объекта переписываете эти хранимые процедуры? Если в процессе работы вдруг появляется потребность в новом аттрибуте, то потребуется: 1. Изменение структуры хранения 2. Изменения алгоритма обработки (тем самых хп) 3. Изменение клиента. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:57 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
У меня на клиенте в объекте есть только те методы, которые дергает пользователь, если их пользователь не дергает, то они на клиенте не нужны -------------------- Не учи отца и баста! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:58 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Ну вот, уже веселее, и до конца дня рабочего полчаса - есть время ответить :)) Пример действительно плохой взят. Потому что у всех тут (почти) он работает на чистом SQL. У нас также есть рассчет цены товаров, зависит от: типа товара, базовой цены, группы в которую входит, еще чего-то... в принципе, неважно от чего, главное, чтобы это "чего" можно было узнать по конкретному товару. Вся эта фигня конечно же делается на SQL, причем одной процедурой, а методы рассчета записаны своим спец. языком как для каждого тиап товара, так и общие - кстати, кому тут парсер то? :) Я что-то не вижу, куды тут ООП присобачить, методы, свойства? Сказали товару - рассчитайся, т.е. дернули ХП - оно все и рассчиталось. Дернули для любого товара одну ХП - она там внутри сама разберется, чего и как. Зачем на клиента тянуть чего-то, какие такие телодвижения делать? авторК примеру, я просто выбираю все "товары", в том числе и унаследованные. Выражение для выборки строится наполовину в промежуточном слое, наполовину в СУБД, т.к. логика построения такого выражения достаточно сложная, а язык СУБД для этого очень слабо приспособлен. Т.е. вы не можете select * from Товар написать прямо в ХП? Для этого городите непонятно что? А зачем? Я так и не понял. авторЕсть свой язык для выборки объектов + набор универсальных хранимых процедур, в которые передаются "полураспарсенные" конструкции этого языка. Этими несколькими хранимыми процедурами генерится динамический SQL для выборки коллекции объектов. Коллекции каких таких объектов? Почему так хитро? Почему не только SQL? авторОбработка результата тоже производтся в промежуточном слое, на выходе получается коллекция объектов класса "Товар". Зачем? Зачем вам обрабатывать это на клиенте? Зачем вообще обрабатывать? Вообще, не зная, что вы подразумеваете под коллекцией объектов, под самим объектом и т.д. авторВ результате при добавлении любых новых систем ценообразования, любых специфических типов товаров, в клиентский код, который работал с коллекциями товаров не прийдется вносить никаких изменений. Но если что сильно поменяется - придется. У нас же на клиента не надо вносить ничег ни до, ни после, вообще клиенту фиолетово. авторРазумеется. У меня логика кэширования зависит от логики приложения, а не от логики СУБД. Так и был вопрос - чего кэшируете? авторОчень не хочется здесь всю архитектуру приложения описывать, т.к. кучу времени займет, но поверьте, одним SQL-ем здесь не обойтись... Он используется на клиенте для выборки коллекций объектов с использованием связей между сущностями. Связи также описаны в метаданных. Помимо обычных атрибутов, хранящихся в таблицах, есть т.н. "расширенные" атрибуты, хранящиеся вертикально в отдельной таблице, в принципе по ним также может осуществляться сортировка и поиск. Если это все писать на чистом SQL... Сложновато получается и непонятно, мягко говоря. На клиенте меня не интересуют таблицы и view, меня интересуют сущности в моей системе, в терминах этих сущностей и работают выборки с использованием своего языка. Да и выборки получаются не очень простые, на 2-3 рекордсета в среднем, их приведение к коллекции объектов осуществляется отдельно, поэтому сам результат выполнения SQL-выражения мне на клиенте тоже неинтересен. Эээээ..... Зайдите на www.ozon.ru, возьмите любой товар. На товаре до фига чего есть - авторы, страницы, издатель, обложка, производитель, актеры, описания, комментарии, аналоги и еще туева хуча всякой белиберды, которая зависит от типа товара, и все это хранится не в тексте (как на html-странице красиво), а в атрибутах товара - единичных, множественных, привязанных других объектах и т.д. и т.п. и на клиенте выглядит ужасающе. И все это работает через СУБД. Нет, конечно на клиенте кое-чего тоже сделано, чтобы оно все показывалось как надо, но обрабатывается, связывается и т.д. оно только в СУБД, через sql. Никаких проблем таких, чтобы решать это чем-то еще, нет. авторЯ не говорю, что не реализуемо никогда и не прикаких обстоятельствах, я даже не говорил, что это и у меня нереализуемо. Это просто _нецелесообразно_ именно в моей архитектуре. Почуствуйте разницу. В вашей это может замечательно работать. Ваша архитектура ничем не отличается от других - ну если только плохо построена под sql изначально :) автор >>А зачем Вам на клиенте нужны полноценные объекты? Что Вы с ними делать будете на клиенте? Вопрос на миллион долларов :). Вы знаете, я, как ни странно, буду вызывать их методы :). Причем у объекта типа 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 мне в этом случае вернет нечто непонятное. Я выше написал, как оно работает. Вам что, проблема сделать одну ХП, которая будет понимать, какой метод дернуть исходя из типа товара? Для этого вы городите городушки? Только для этого???!!! Или вы что-то скрываете? :) -- Tygra's -- ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 17:58 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
авторДа я верю что у вас это делается. Как вы производте выборку этих объектов типа Документ? Тоже хранимой процедурой? А на каждый новый тип объекта создаете новые хранимые процедуры для выборки? И в каждой такой процедуре проверяете например права на выборку определенных объектов? Или такие права у вас проверяются на клиенте? А при изменении набора хранимых атрибутов объекта переписываете эти хранимые процедуры? Да, именно так все и делается, и права в СУБД проверяются. Чем достигается самая лучшая: скорость работы, простота, универсальность, понятность, неперегруженность.... ну может еще чего забыл -- Tygra's -- ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 18:01 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Да, и все же, мы тут видать все не поняли, поэтому повторю и я: И все-таки, Вы не ответили на вопрос, зачем Вам на клиенте полноценные объекты? -- Tygra's -- ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 18:02 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Уу... Как у вас все запущено... Это я говорю про поддержку и развитие такой системы. Возможно, быстродействие у вас на высоте, но потеряв не очень много в быстродействии можно сильно выиграть в минимизации необходимого для расширения/поддержки системы кода. Один из методов - это как раз то, от чего вы мне посоветовали отказаться. Причем в обработку там подключаются тоже только нужные таблицы, просто тот же SQL будет генерироваться автоматически, а не вручную. pkarklinЕсли в процессе работы вдруг появляется потребность в новом аттрибуте, то потребуется... Мне для заведения нового атрибута в самом простом случае не потребуется ни того, ни другого, ни третьего. В системе есть т.н. расширенные атрбуты, которые хранятся вертикально в отдельной таблице. Например если в документе есть поля, которые надо выделять отдельно, но на бизнес-логику они никак не завязаны, зато по ним например может производиться поиск, то мне не придется изменять ничего, просто в конфигураторе описать новые поля. В самом запущеном случае потребуется изменение структуры хранения, алгоритмов обработки и изменение клиента. Изменение алгоритмов обработки - это не подразумевается написание хп для выборки - они на каждый тип не нужны. Разграничение прав доступа проверяется тоже в этих универсальных процедурах. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 18:06 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Возьмем документ, какие у него есть методы для пользователя? Посмотреть Редактировать Изменить статус Распечатать Удалить Зачем в объекте на клиенте нужен метод рассчитать цену, если пользователь всего навсего вызовет метод изменить статус, у которого будет только 2 параметра: идентификатор объекта и идентификатор статуса Все остальное работает в базе Данный метод (виртуальный) по типу документа найдет метод изменения статуса и вызовет его передав 2 параметра (смотри выше). Метод изменения статуса откроет транзакцию и вызовет событие OnChangeStatus с теми же двумя параметрами. Обработчик-процедура возьмет список товаров документа и для каждого вызовет виртуальный метод определения цены с двумя параметрами: идентификатор документа и идентификатор товара Виртуальный метод по типу товара определит конкретную процедуру начисления цены и вызовет ее с 2 параметрами: идентификатор товара и output параметр цена и вернет код 0, если все в порядке Метод изменения статуса если все ОК запишет новый статус документу и закроет транзакцию Вот и все. Понятное тех. задание? -------------------- Не учи отца и баста! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 18:08 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Я уже давно не умею проектировать необъектно, но самое главное я просто не представляю что можно делать на клиенте, кроме манипуляций формами. -------------------- Не учи отца и баста! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 18:14 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
[quot Old Nick]У меня на клиенте в объекте есть только те методы, которые дергает пользователь, если их пользователь не дергает, то они на клиенте не нужны [quot] Прочитайте еще раз внимательно ... Пользователь дергает эти методы... Эти методы реализуются по-разному у разных типов объектов, но пользователь их дергает одинаково. Для выполнения этих методов объекту нужны атрибуты, загружаемые з базы. Может быть я конечно непонятно пишу, не знаю... Но мне почему-то кажется, что дело не во мне, просто кое-кто упорно не желает понимать простейших вещей. Разумеется можно дернуть одну ХП, которая внутри определит тип товара и дернет другую ХП. При добавлении нового типа товара вам нужно будет переписывать эту ХП. Но ООП для того и вводилось, чтобы не переписывать постоянно один и тот же код. Переписывать гораздо проблематичнее, чем написать новый, если вы этого не понимаете, то просьба сначала пойти почитать основы ООП, потом возвращайтесь и продолжим разговор. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 18:14 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
При добавлении нового типа товара базовую виртуальную процедуру менять не нужно, она же виртуальная, ей фиолетово, какие типы товара будут, а делается это так: declare @ProcName varchar(128) declare Walker cursor local fast_forward for select ProcName = o.name from sysobjects o join ObjectTypeTree t on ‘sp’ + t.ParentType + ‘_CalcPrice’ = o.name and o.xtype = ‘P’ and t.Type = @Type order by t.Level desc open Walker fetch next from Walker into @ProcName while @@fetch_status = 0 begin exec @Err = @ProcName @ThingId fetch next from Walker into @ProcName end close Walker deallocate Walker -------------------- Не учи отца и баста! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 18:21 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
tygraТак и был вопрос - чего кэшируете? Мне честно говоря надоело повторять, можете прочитать выше парой страниц, пишу в последний раз: кэшируются например метаданные для типов объектов + некоторые наиболее часто используемые выборки системных объектов. Полагаться для этого на кэш СУБД нет никакого резона. tygraВаша архитектура ничем не отличается от других - ну если только плохо построена под sql изначально :) Еще одно необоснованное высказывание? Old NickЗачем в объекте на клиенте нужен метод рассчитать цену Я не знаю, у меня таких методов и в помине не было. Old NickЯ уже давно не умею проектировать необъектно, но самое главное я просто не представляю что можно делать на клиенте, кроме манипуляций формами. Так у вас формы оторваны от данных вообще? Чтобы получать/изменять данные наверное что-то нужно еще кроме манипуляции формами? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 18:21 |
|
Создание сервера приложений
|
|||
---|---|---|---|
#18+
Old NickПри добавлении нового типа товара базовую виртуальную процедуру менять не нужно, она же виртуальная, ей фиолетово, какие типы товара будут, а делается это так Вы всерьез считаете что эмуляция ООП в базе данных это лучший подход к проектированию системы? Мда... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2005, 18:24 |
|
|
start [/forum/topic.php?fid=33&msg=33318117&tid=1548944]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
133ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 246ms |
0 / 0 |