|
|
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSalexeyvgПроцедуры - это один из способов разделения уровней приложения. хранимые процедуры это конечно хорошо. Вот только что делать, если клиенты написаны с ООП подходом? Вы обьекты прямо на ХП маппить собираетесь?Что то я не понял - если в источнике данных нет таблиц, то ООП подход к написанию приложения неприменим? То есть все программы, которые получают данные, например, из Веб-сервисов, файлов, изображений и т.п. не могут быть написаны с использованием ООП? Это новое слово в теории! :-) Как раз ООП для варианта с строго прописанными интерфесами взаимодействия систем подходит очень даже хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2011, 15:45 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ViPRosобе варианта присутствует в режиме навигации - тянется точка входа в граф и ленивая загрузка по мере навигации по графу в режиме макротипов - сразу грузится связанный подграф (никто ничего не подгружает) вот, замечательно. Итого, если мы хотим получить список всех 9-ти этажных домов всех улиц (скажем что-бы пометить их что необходима инспекция лифтов) ваш запрос привезет на клиента полный граф, содержащий даже паспортные данные владельца каждой квартиры каждого дома. Если-же вы там переключите свой режим на навигационный, то получите пулеметную очередь из запросов на дома каждой улицы. Кстати расскажите заодно, как-там это переключение между режимами работает. Я устанавливаю это как параметр всей сессии, или каким-то образом могу пометить любой узел графа что-бы он грузился полностью или навигационно? ViPRosесли Именно фильтрация , то можно явно задвать IsNull и т.д. я надеюсь вы в курсе, что только-что отправили ваш запрос на full scan таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 01:25 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgхранимые процедуры это конечно хорошо. Вот только что делать, если клиенты написаны с ООП подходом? Вы обьекты прямо на ХП маппить собираетесь?Что то я не понял - если в источнике данных нет таблиц, то ООП подход к написанию приложения неприменим? То есть все программы, которые получают данные, например, из Веб-сервисов, файлов, изображений и т.п. не могут быть написаны с использованием ООП? Это новое слово в теории! :-) Как раз ООП для варианта с строго прописанными интерфесами взаимодействия систем подходит очень даже хорошо.[/quot] к вам такой-же вопрос про графы. Расскажите-ка как ваши графы грузяться используя "строго прописанные интерфейсы взаимодействия систем" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 01:27 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgКак раз ООП для варианта с строго прописанными интерфесами взаимодействия систем подходит очень даже хорошо к вам такой-же вопрос про графы. Расскажите-ка как ваши графы грузяться используя "строго прописанные интерфейсы взаимодействия систем" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 01:29 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSalexeyvgКак раз ООП для варианта с строго прописанными интерфесами взаимодействия систем подходит очень даже хорошо к вам такой-же вопрос про графы. Расскажите-ка как ваши графы грузяться используя "строго прописанные интерфейсы взаимодействия систем" Вы про этот вопрос? StalkerSграф обьектов как тянуть собираетесь к примеру? Скажем Streets -> Houses -> Flats. Дома и квартиры будут сразу затянуты на клиента вместе с улицей, или через ленивую загрузку? Получение обьектов по какому-либо критерию - все дома, где есть владелец квартиры Вася. Тоже будет отдельная ХП, верно? Да, для нужных бизнес-действий будут нужны соответствующие интерфейсы. У вас-же код не получается сам по себе, его же пишут? Просто вы к написанию ХП относитесь со страхом - как это, НАПИСАТЬ ХП??? Да, будут разные ХП для работы получением данных из структуры Streets -> Houses -> Flats, они будут возвращать разные наборы атрибутов и иметь разные параметры, в зависимости от назначения. По любому нужно писать весь этот код. Ведь каждое получение данных делается не изолированно - это свой интерфейс, своё отображение, своя логика взаимодействия с пользователем. В каких то случаях использование ORM будет упрощать программирование получения данных, но в ущерб скорости, и упрощение общей работы очень маленькое, потому как получение данных - не самая трудоёмкая для программиста часть работы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 09:13 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSViPRosесли Именно фильтрация , то можно явно задвать IsNull и т.д. я надеюсь вы в курсе, что только-что отправили ваш запрос на full scan таблицы?Вы просто не задумывались, как можно структурировать и вообще организовывать код на стороне СУБД. У нас, например, были процедуры для отображения данных (они только выводили нужные данные, не делая фимльтрацию), а фильтрацию данных делали другие процедуры, передавая потом то, что нужно отобразить, первым процедурам. В процедуре фильтрации есть параметры типа сортировки, простраинчного вывода и т.п, которые просто напрямую передаются в процедуру обработки. Соответственно, клиент вызывает процедуру выборки с нужными фильтрами и в параметре указывает, какой вид отображения ему нужен (про этому критерию из этой процедуры вызывается соответствующая процедура отображения найденного результата). Ну и в крайнем, совсем запущенном случае, можно использовать динамический SQL. Это всё же лучьше, чем формировать SQL на клиенте. То есть в вашем примере с графом можно сделать 3 процедуры отображения графа с различными атрибутами, и 5 процедур фильтрации, с несколькими наборами параметров. И это покроет все варианты запросов к этим структурам данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 09:25 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgСоответственно, клиент вызывает процедуру выборки с нужными фильтрами и в параметре указывает, какой вид отображения ему нужен (про этому критерию из этой процедуры вызывается соответствующая процедура отображения найденного результата). Ну и в крайнем, совсем запущенном случае, можно использовать динамический SQL. Это всё же лучьше, чем формировать SQL на клиенте. То есть в вашем примере с графом можно сделать 3 процедуры отображения графа с различными атрибутами, и 5 процедур фильтрации, с несколькими наборами параметров. И это покроет все варианты запросов к этим структурам данных. о как, аж 8 процедур на чтение для 3-х простеньких сущностей. Кроме того, не забывайте, что сущности должны также уметь добавляться, удаляться и апдейтится. Сколько-же их будет? Можете привести схематично что это за процедуры ? А то честно говоря из того что вы написали я слобо представляю как данные из БД с помощью ваших процедур окажутся в моем графе. Юзер-кейсы, которые я приводил это поиск 9-ти этажных домов по всем улицам, можно добавить обновление статуса квартиры если задолженность там превысила порог, или удаление чего-нибудь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 10:50 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
из того что вы написали я слабо представляю как данные из БД с помощью ваших процедур окажутся...Это решается повышением квалификации в области СУБД. :) А теперь поведайте нам про безопасность системы, работающей прямыми запросами. Также интесна борьба с SQL-injection и присечением выполнения запросов запрещенных логикой приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 11:03 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
LSVиз того что вы написали я слабо представляю как данные из БД с помощью ваших процедур окажутся...Это решается повышением квалификации в области СУБД. :) А теперь поведайте нам про безопасность системы, работающей прямыми запросами. Также интесна борьба с SQL-injection и присечением выполнения запросов запрещенных логикой приложения. это вы нам для начала поведайте процедуру перемещения данных их БД в граф объектов, внятного ответа я пока ни от кого не получил. Или вы за сутки так и не придумали ответ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 12:04 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSо как, аж 8 процедур на чтение для 3-х простеньких сущностей. Кроме того, не забывайте, что сущности должны также уметь добавляться, удаляться и апдейтится. Сколько-же их будет? А сколько у вас обычно в приложении строк кода, работающих с данными из трёх простеньких сущностей? Я подозреваю, что тыща на сущность, если конечно простенькое приложение. В сложном может быть наверное десяток тыщ. Вам просто неприятно ТАКОЕ распределение кода между языками? Надо же, 8 (ВОСЕМ!!!) процедур на 3 сущности. У нас десятки процедур на сущность, ничего страшного. Всё равно клиентского кода получается больше, так что затраты на интерфейс у СУБД маленькие. Зато он есть, интерфейс. Насчёт простых добавлений удалений и т.д - в последнем проекте разрабтчики использовали ОРМ для таких операций. Хотя это в общем то неважно - всё равно простых добавлений удалений и т.д обычно не бывает - обычно есть бизнес-действия, которые надо программировать, и в этих бизнес-действиях обычно много чего есть кроме вставки одной записи в одну таблицу. Просто вы это программируете не в ХП, а мы в ХП, но кода у нас при этом вряд-ли больше. SQL всё таки достаточно высокоуровневый и выразительный язык. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 13:30 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSэто вы нам для начала поведайте процедуру перемещения данных их БД в граф объектов, внятного ответа я пока ни от кого не получил. Или вы за сутки так и не придумали ответ? Мне, честно говоря, нечего сказать. Я не понимаю, какие тут могут быть трудности и о чём вопрос. Просто читаются приложением данные и всё. Командами "выполнить процедуру" и "прочитать строку из рекордсета". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 13:39 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSViPRosобе варианта присутствует в режиме навигации - тянется точка входа в граф и ленивая загрузка по мере навигации по графу в режиме макротипов - сразу грузится связанный подграф (никто ничего не подгружает) вот, замечательно. Итого, если мы хотим получить список всех 9-ти этажных домов всех улиц (скажем что-бы пометить их что необходима инспекция лифтов) ваш запрос привезет на клиента полный граф, содержащий даже паспортные данные владельца каждой квартиры каждого дома. Если-же вы там переключите свой режим на навигационный, то получите пулеметную очередь из запросов на дома каждой улицы. Кстати расскажите заодно, как-там это переключение между режимами работает. Я устанавливаю это как параметр всей сессии, или каким-то образом могу пометить любой узел графа что-бы он грузился полностью или навигационно? ViPRosесли Именно фильтрация , то можно явно задвать IsNull и т.д. я надеюсь вы в курсе, что только-что отправили ваш запрос на full scan таблицы? Ты лучше не гадай , а поспрашивай. :) Никаких пулеметов и очередей. Есть навигационный граф, и есть помеченнные подграфы (макротипы). Вот часть графа, и макротип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 13:39 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ViPRos, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 13:40 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
и если у тебя в БД есть поля NULLable ,то я не могу запретить тебе их сравнить на нулевость, лучше ты уж не проектируй так, что бы иметь дело с нулл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 13:42 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ViPRos, а вот автоматически сгенерированная форма для макротипа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 13:48 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ViPRos, Навигационный режим - для визуального анализа данных и построения отчетности, и еще очень хорош время проектирования. Режим макротипов - основной режим работы спректированного (сгенерированного из метеданных + нелинейные методы) приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 14:01 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
ViPRos, в навигацинном режиме граф грузится принудитльно, по мере телодвижений клиента, в режиме макротипов граф грузится строго по макротипам (целостно, макротип неделимый транзакционый элемент системы), даже простые типы имеют дефольтное макротипное представление, при этом типы структруирующие разные макротипы могут быть из одного и того же множества типов, что не мешает целостному опрерированию макротипами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 14:07 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgЯ не понимаю, какие тут могут быть трудности и о чём вопрос. Просто читаются приложением данные и всё. Командами "выполнить процедуру" и "прочитать строку из рекордсета".И я не понимаю. А человек вот тут из этого рокет-сайенс пытается сделать. :) Напоминает задачу Х=1+2 на С++ на три листа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 15:19 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
LSValexeyvgЯ не понимаю, какие тут могут быть трудности и о чём вопрос. Просто читаются приложением данные и всё. Командами "выполнить процедуру" и "прочитать строку из рекордсета".И я не понимаю. А человек вот тут из этого рокет-сайенс пытается сделать. :) Подозреваю, что человек говорить не о явных вызовах "чтение-запись" разной грануляности по усмотрению прогера, а о какой то встроенной семантике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 15:27 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
alexeyvgА сколько у вас обычно в приложении строк кода, работающих с данными из трёх простеньких сущностей? Я подозреваю, что тыща на сущность, если конечно простенькое приложение. В сложном может быть наверное десяток тыщ. Вам просто неприятно ТАКОЕ распределение кода между языками? Надо же, 8 (ВОСЕМ!!!) процедур на 3 сущности. У нас десятки процедур на сущность, ничего страшного. Всё равно клиентского кода получается больше, так что затраты на интерфейс у СУБД маленькие. Зато он есть, интерфейс. Насчёт простых добавлений удалений и т.д - в последнем проекте разрабтчики использовали ОРМ для таких операций. Хотя это в общем то неважно - всё равно простых добавлений удалений и т.д обычно не бывает - обычно есть бизнес-действия, которые надо программировать, и в этих бизнес-действиях обычно много чего есть кроме вставки одной записи в одну таблицу. Просто вы это программируете не в ХП, а мы в ХП, но кода у нас при этом вряд-ли больше. SQL всё таки достаточно высокоуровневый и выразительный язык. имхо, вы не так поняли вопрос, который я задавал. Мы сейчас не говорим о распределении бизнес-логики - обсуждается ООП и вся бизнес-логика находиться в объектах, а не в ХП. Мы говорим про то, как читать/добавлять/удалять/обновлять объекты, когда интерфейс БД задан только через хранимые процедуры. Обсуждается только тот кусок системы, который отвечает за маппинг объектов на таблицы базы данных, не больше не меньше. Повторю начальные условия: Есть три класса доменной модели - Код: plaintext 1. 2. Есть три таблицы в БД: Код: plaintext 1. 2. Один из возможных юзеркейсов - получить коллекцию 9-ти этажных домов со всех улиц. Или проапдейтить статут квартир у которых задолженность выше пороговой. Для примера, на linq2sql для этого было-бы написано что-то типа: Код: plaintext 1. 2. 3. Вопрос: покажите, как это будет реализовано у вас, в случае когда таблицы закрыты забором из ХП. Интересует как работает цепочка tables -> ... -> domain class. Желательно показать кодом (схематично). ViPRosЕсть навигационный граф, и есть помеченнные подграфы (макротипы). ну так и покажи на моем простеньком примере как все будет работать вместо вываливания кучи картинок. Задача описана выше. Какие ХП будут учавствовать, как и кто будет выбирать нужные ХП, как все это превратиться в доменные классы и затем сохраниться обратно. Смелее. Пока-что из твоих картинок я не вижу ничего нового - загружается подграф целиком вместо только нужных частей. Недостаток этого я указывал выше - на клиента идет масса данных, которые ему не нужна. ViPRosи если у тебя в БД есть поля NULLable ,то я не могу запретить тебе их сравнить на нулевость, лучше ты уж не проектируй так, что бы иметь дело с нулл. это сейчас о чем? ;) Про необязательные параметры? При чем тут nullable поля? Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 15:54 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Помимо безопасности, разделения кода на слои, не стоит забывать о том, что ХП - это защита от дурака. Использование правильно написанных ХП не приведет данные в БД к некорректности, не даст криворукому програмисту, разрабатывающему клиента, поломать данные. У него просто не будет прав на это. Да при программисту , пишущему клиента, иногда вообще не стоит знать структуру данных в БД. В MSSQL даже придумали такие модные вещи, как instead-триггеры. Вешаешь его на модифицирующую вьюху(вот тебе и сущность), в триггере редактируешь данные, а из каких таблиц во вьюху данные попатают, тебе и знать незачем... StalkerS , что вы со своими графами так привязались... Вам уже 10 раз написали: на каждую сущность будет несколько процедур: читающая, читающая с фильтром, модицирующая(инсерт, апдейт), удаляющая. В процедурах модификации так же можно настроить проверку корректности изменения и удаления. + ХП - это предварительно скомпилированный код, и он работает немного быстрее , чем прямой sql-код. + для систем(веба, например) со слабым каналом связи по интернету это ведет к уменьшению запроса, т.к. на сервер передается только вызов ХП, а не текст запроса, который может быть большим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 17:24 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerS Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 17:27 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerSимхо, вы не так поняли вопрос, который я задавал. Мы сейчас не говорим о распределении бизнес-логики - обсуждается ООП и вся бизнес-логика находиться в объектах, а не в ХП. Мы говорим про то, как читать/добавлять/удалять/обновлять объекты, когда интерфейс БД задан только через хранимые процедуры. Обсуждается только тот кусок системы, который отвечает за маппинг объектов на таблицы базы данных, не больше не меньше.Не увидел я такого изменения темы, по крайней мере в вашем первом посте. Конечно, если БД - это просто не стирающиеся при выключении питания переменные, интерфейсов нет, то, конечно, использование ХП не имеет смысла. Или в крайнем случае, иожно использовать автоматически генерируемые ХП, но это никак не отличается от прямых обращений к таблицам. ХП нужны только как интерфейс к СУБД, ни для чего больше. Это как обсуждение варианта - использовать для обращения у серверу приложений веб-сервисы или открыть его память клиенту и обращаться напрямую. Если ставится жёсткое условие - клиент будет работать только с внутренними объектами апп-сервера, которые у него в памяти и никогда - с определёнными кем-то интерфейсами, то городить веб-сервисы для обращения к памяти просто глупо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 17:53 |
|
||
|
linq2sql vs хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
StalkerS, ты просто не въехал :) грузится именно помеченный подграф(макротип, бизнес-объект, агрегатный класс,,. как хошь назови), а не произвольный процедуру эту дописывает автоматом на случай нулл даже адо.нет :) к картинкам бы надо было посерьезнее присмотреться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 17:58 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37106617&tid=1542319]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
172ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 539ms |

| 0 / 0 |
