|
|
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
softwarerНеужели меня обманули, когда говорили, что в MSSQL есть нормальный неполный фетч? Можно, конечно, это и нормальный неполный фетч, но... (вот откуда ноги про top 30 торчат) Разработчик MS SQL с удовольствием познакомится с нормальным неполным фетчем в MS SQL. Версии от 2000. Временные таблицы и аналитические функции не предлагать. :) softwarerНа всякий случай еще раз отмечу, что по большинству реально значимых вопросов мы с Вами явно согласны.+1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 00:40 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousИ профилактика тоже элементарна - обычный code review. Если не хватает сил делать это на постоянной основе, то можно приурочить к каким-либо значимым для программиста событиям вроде беседы о размере оплаты труда - лишь бы коллектив знал о неотвратимости процесса ;) andrey_anonymousА на эту тему существуют ежедневные сборки проекта и системы управления версиями. Если такого рода проблемы возникли при code review, это означает что "вредоносный" код УЖЕ в системе. Не каждый же день code review. Код-то уже написан, оттестирован, может быть даже уже дошел до Заказчика. А его нужно переписывать. тем более при беседе о размере оплаты труда - если уж вопрос поднимается ТАМ, подозреваю, программист уже сделал кучу подобных ошибок, некоторые из которых вызвали самую живую реакцию Заказчика. А если он такие ошибки изначально НЕ СУМЕЕТ сделать - может быть это и хорошо? А на code review потратить внимание программиста на его другие "подвиги". Ежедневные сборки проекта не помогут - код-то компилируется и даже тесты проходит. Системы контроля версий помогут только установить "виновника торжества" - но и только. andrey_anonymousВ общем, решать технологические задачи за счет архитектуры продукта - на мой взгляд тоже ошибка проектирования. Всегда казалось, что архитектура продукта должна упрощать программисту возможность делать его работу. Как раз решая за него (или предлагая решение по умолчанию) технологические задачи. Разве архитектурное решение (ограничение) хуже предлагаемого Вами организационного решения (ограничения)? В данном случае, архитектурное решение - это как констрейнт в базе. Его просто НЕ ПОЛУЧИТСЯ нарушить. А если снимать констрейнты, вынося их на сервер приложений или еще куда - кто-то их непременно нарушит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 01:02 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
softwarerВопрос "преимущества и недостатки унифицированного подхода против преимуществ и недостатков индивидуально подхода" - классический, вечный вопрос любой инженерной профессии. Имеет он и достаточно универсальный ответ: чем ниже технологический уровень изделия, тем более оправдана унификация и наоборот, чем выше требования к качеству результата, тем тщательнее нужно подходить к каждой детали. Где-то видел классную метафору на сей счет: это как МакДональдс vs Классный шеф-повар. В МакДональдс-е берем любую обезьяну, учим ее по строгим и жестким инструкциям готовить бигмак - и получаем бигмаг - не классный, но ПРИЕМЛЕМЫЙ... Зато можем в любой момент уволить кучу обезьян, нанять кучу обезьян - бигмак будет тот же самый. Классный шеф-повар может приготовить классное блюдо, рядом с которым бигмак, гм... Однако если он вдруг уйдет, заболеет и т.п. - никто не сумеет продолжать готовить такое же классное блюдо... Обе модели вполне жизнеспособны. Можно работать и так и так. Главное не смешивать эти модели - иначе получим кучу обезьян, делающих те же самые бигмаки, зато если кто-то из обезьян уйдет - не получатся и они... Так что вопрос, что позволять, а что не позволять программисту - это зависит от проекта и от программистов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 01:20 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
igorolv andrey_anonymousИ профилактика тоже элементарна - обычный code review ... лишь бы коллектив знал о неотвратимости процесса ;) Если такого рода проблемы возникли при code reviewКажется, пришел мой черед удивляться :) Проблемы такого рода не возникают при code review (кроме случаев профнепригодности reviewer :). При review они всего лишь выявляются . Основа командной разработки - "стандарты разработки". Обязательные к применению всеми членами проектной команды. Сюда входят в том числе и соглашения об именовании переменных, и правила оформления кода, и требования к содержанию комментариев, и перечень запрещенных к повторению типовых ошибок. Новый член команды регулярно представляет код на проверку, опытные товарищи - пореже :) Важно именно коллективное осознание того факта, что любой кусок кода может быть проверен в любой момент времени и общее отрицательное отношение к нарушению соглашений. Это не панацея, но оправдывающая себя практика. igorolvА если он такие ошибки изначально НЕ СУМЕЕТ сделать - может быть это и хорошо?Сумеет. Человек изобретателен. А вот то, что в нужный момент вполне грамотный специалист не сможет воспользоваться наиболее эффективным подходом к задаче - факт. Просто потому, что не существует универсальных правил "это всегда хорошо, а вот то - заведомо плохо". Ограничивая программистов искусственными рамками, Вы заведомо лишаете команду возможности создать эффективный продукт. igorolvЕжедневные сборки проекта не помогут - код-то компилируется и даже тесты проходит.Замечательно. Значит, система соответствует ТЗ. igorolv Системы контроля версий помогут только установить "виновника торжества" - но и только.Какого виновника? Система управления версиями должна помогать отвечать на вопрос "кто использует мой код", а стандарты разработки - определять безопасный способ внесения изменений в интерфейсы. igorolv andrey_anonymousВ общем, решать технологические задачи за счет архитектуры продукта - на мой взгляд тоже ошибка проектирования.Всегда казалось, что архитектура продукта должна упрощать программисту возможность делать его работу. Как раз решая за него (или предлагая решение по умолчанию) технологические задачи. Не согласен. Архитектурные решения должны позволять строить надежное и сопровождаемое приложение , а не затыкать технологические дыры. Технология разработки должна позволять реализовывать наиболее выгодную архитектуру, а не диктовать какие-то техничесие решения "на все случаи жизни". Пропоганда "best practicles" должна вводить в обиход наиболее удачные паттерны. И смешивать не стоит. На счет же "НЕ ПОЛУЧИТСЯ нарушить констрейнт архитектурного решения"... Искренне завидую Вашему оптимизму :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 01:59 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
igorolv1) Нужно показать пользователю позицию загруженной страницы данных в вертикальной полосе прокрутки. .... Хм. Excel вполне терпимо справляется с этой задачей. В целом - я согласен с тем, что здесь есть проблема. Но ее вес.. куда меньше, это уже из серии "жемчуг мелок". igorolv2) Скорее дизайн-соображение: пользователь хочет иметь полный контроль над своими данными. Я не очень понимаю, что Вы называете "полный контроль". Пользователь, по моим представлениям, предпочитает приближаться к нужной цели методом последовательных приближений. То есть взглянуть на выборку, наложить фильтр, взглянуть на получившуюся выборку, усилить фильтр, отсортировать получившуюся выборку и наконец увидеть на первой странице нужную запись - примерно так. Это, конечно, чуть утрировано, и опытные пользователи справляются быстрее, но тем не менее, запрос первой страницы - очень типичная операция. Конечно, можно прокачать данные на клиента и дальше вертеть их там. Что здорово похоже на перенос функций сервера на клиента. igorolv3) Есть некоторое подозрение, что при загрузке очередной порции данных сервер будет хоть чуть-чуть, но притормаживать: Согласен. При этом следует иметь в виду, что пользователи сравнительно редко листают длинные выборки - хотя бывает. И определенно, большинство людей относится к ожиданиям "часто по чуть-чуть" куда терпимее, нежели к "редко, но долго". Практически существует комфортное время отклика системы на действия пользователя - где-то 0.1-0.3 секунды - и пока программа его выдерживает, пауза только на руку. igorolvТут все-таки придется выполнять по запросу на каждое нажатие клавиши - а тут можно не успеть за пользователем. Кстати, не согласен. Довольно типичное решение в такой ситуации - выполнить запрос, когда пользователь сделает паузу в наборе. Согласен, наличие полного набора данных на клиенте позволяет решить ситуацию лучше, но и с паузой получается вполне комфортно. igorolv5) Дизайн-соображение: подозреваю, что как минимум некоторые пользователи предпочтут подождать пару секунд (но не более) при открытии формы, чем ждать по 0.3 секунды (которая может растянуться) при переходе с очередной сотни записей на другую. Чуть выше я привел числа, полученные в первом же эксперименте. 0.25 секунды против 13.4 Не знаю пользователей, которые предпочтут второй вариант первому, особенно чтобы просмотреть первую страницу. igorolv6) Не очень представляю, как постраничная загрузка может гармонично (как негармонично - вполне представляю :)) сочетаться с гридом, в котором есть древовидная колонка (ID - PARENT_ID). Хм. Не понимаю разницы. Для иерархии единственное, что нужно - чтобы записи шли в специфическом порядке, в остальном - обычная выборка. В Oracle я сделаю это через CONNECT BY, в MSSQL вроде бы появился CTE с рекурсией. В обоих случаях - никаких проблем со страничной загрузкой. Если Вы имеете в виду именно деревянную функциональность, неполное раскрытие, то лично я предпочитаю решать эту задачу через независимые запросы для отдельных узлов. Так и удобнее, и появляется возможность строить неоднородное дерево. igorolvЕсли весь код общения с сервером из приложения находится, например, в хранимках, это дает достаточно сильную гарантию того, что кто-то из программистов не будет "подпольно" писать sql-код помимо этого хранилища. Почему, собственно? igorolv(Встречал я в таких "хранилищах" нечто вроде "select :строковый_параметр1 from :строковый_параметр2. хотя, такой "паттерн" вполне можно и в хранимку обернуть). Есть такое. Неоднократно видел хранимки типа EXECUTE_SQL (Statement varchar). В MSSQL, если не ошибаюсь, даже есть такая стандартная, кажется sp_executesql. igorolvПрограммиста довольно сложно удержать голым "регламентом" от чего-то вроде query.Text = "select A, B, C from Т". .. причем независимо от того, выстроен ли интерфейс на хранимках или нет. Лично я не люблю решать административно задачи, легко решающиеся технически. Прежде всего, я стараюсь держать разумных программистов, которых не нужно постоянно контролировать, достаточно объяснить, а от случайных неприятностей страховать на уровне кода: например, мой компонент сессии просто не позволит выполниться коду с установленным AutoCommit. Если потребуется, завтра я могу точно так же запретить выполнять через него все, кроме хранимок. igorolvДаже если оставить вопросы возможности редизайна в стороне - хочется ЗНАТЬ "все ли sql-операции, используемые в системе компилируются В ДАННЫЙ МОМЕНТ?", Хм. Мне казалось, что с этим у MSSQL проблема, разве нет? Хотя и в оракловом механизме есть не только плюсы, но и неудобства. А вот насчет "хочется знать"... честно говоря, не хочется. Предпочитаю действовать так, чтобы не было причин сомневаться. igorolvВсе это можно реализовать и НЕ на хранимых процедурах. Однако на хранимых процедурах все это ВПОЛНЕ МОЖНО реализовать. Это перестает действовать как только появляется динамический SQL. А динамический SQL такая штука, что использовать его надо аккуратно и уместно, но как только он есть, тут же обнаруживаются чертовски уместные места. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 03:42 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
в этой дискуссии забыли упомянуть полезное свойство проекта на ХП - легкость создания Web приложений. Если ХП реализуют бизнес логику (а не insert - uptade), то цена разработки web приложения чисто интерфейсная. Если толстый клиент активно использует для бизнес функций собственный SQL код, контролировать разработку двух клиентов (толстый+тонкий) непросто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 10:11 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
no-userв этой дискуссии забыли упомянуть полезное свойство проекта на ХП - легкость создания Web приложений. В принципе да. Хотя если не ошибаюсь, это верно только для "совсем невесомых" клиентов. no-userЕсли ХП реализуют бизнес логику (а не insert - uptade), То это чаще всего правильно в любом случае. no-userЕсли толстый клиент активно использует для бизнес функций собственный SQL код, контролировать разработку двух клиентов (толстый+тонкий) непросто. Скорее не соглашусь. Если разрабатываются два клиента, более чем естественно активно использовать в них общий код; собственно по-хорошему это должен быть скорее один клиент с двумя faces. При этом "собственный SQL код" никаких проблем не доставляет. Ситуация же "две нескоординированных команды разрабатывают два разных клиента к одному приложению" не представляется мне сколько-нибудь правильной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 10:55 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
softwarer Скорее не соглашусь. Если разрабатываются два клиента, более чем естественно активно использовать в них общий код; собственно по-хорошему это должен быть скорее один клиент с двумя faces. А где и как хранится этот код (Source Safe в виде модулей каких то?) и как две группы разработчиков его используют? Возьмем, к примеру, две группы Дельфи и PHP кодеров. Что они делают с этим кодом, copy/paste в два разных приложения? softwarer При этом "собственный SQL код" никаких проблем не доставляет. Ситуация же "две нескоординированных команды разрабатывают два разных клиента к одному приложению" не представляется мне сколько-нибудь правильной. использование разработчиками интерфейсов только вызовов ХП решает две проблемы: 1) нельзя сделать одну бизнес операцию двумя разными способами: разработчик интерфейса может пользоваться лишь тем, что ему дали в руки 2) документация: API к БД - это - названия ХП типа orderCreate,orderSelect, ,orderItemAdd, orderItemUpdate - заголовки ХП и - описание бизнес логики. Совокупность этих двух вещей дает минимальные усилия на координацию. Если бизнес процедура не реализована в ХП - ее нельзя использовать (и разработчик интерфейса не может copy/paste чужой SQL код в свой PHP скрипт). Если бизнес процедура реализована в ХП - она тем самым на 80% документирована: небольшое описание бизнес логики и возможность взглянуть на код процедуры достаточно для разработчика интерфейсов. Конечно не всегда такой подход оправдан, но для меня 1000 ХП с разумными названиями выглядят проще для понимания, чем 150 таблиц и SQL код разбросанный по приложению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 14:49 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
softwarerИ определенно, большинство людей относится к ожиданиям "часто по чуть-чуть" куда терпимее, нежели к "редко, но долго". Практически существует комфортное время отклика системы на действия пользователя - где-то 0.1-0.3 секунды - и пока программа его выдерживает, пауза только на руку. Это если 0.1-0.3 секунды. А если программа начинает его НЕ выдерживать (рост объема данных, блокировки при одновременной работе, глюки сети). трансформируется в 0.5 -> 1 -> 2 секунды, то пауза в 2 секунды при перелистывании страниц иногда раздражает больше, чем пауза в 5 секунд при открытии формы. А достаточно посмотреть на то, как предлагается реализовывать неполный фетч в MS SQL (ссылку указывал в прошлых постах), то 0.1 - 0.3. секунды ТАК довольно сложно выдержать. Плюс еще и блокировки, которые могут легко увести время в бесконечность... softwarerЕсли Вы имеете в виду именно деревянную функциональность, неполное раскрытие, то лично я предпочитаю решать эту задачу через независимые запросы для отдельных узлов. Так и удобнее, и появляется возможность строить неоднородное дерево. Я и хотел указать, что в данном случае требуется специальный подход. softwarerДовольно типичное решение в такой ситуации - выполнить запрос, когда пользователь сделает паузу в наборе. Согласен, наличие полного набора данных на клиенте позволяет решить ситуацию лучше, но и с паузой получается вполне комфортно. Как раз и зависит от того, нужна ли обратная связь (визуализация результата (a-la Linquo)) в процессе набора или нет. softwarerдает достаточно сильную гарантию того, что кто-то из программистов не будет "подпольно" писать sql-код помимо этого хранилища. Тут способов очень много - у каждого он свой. "например, мой компонент сессии просто не позволит выполниться коду с установленным AutoCommit. Если потребуется, завтра я могу точно так же запретить выполнять через него все, кроме хранимок" если нужно разрешить либо хранимки либо "особые запросы" можно сделать "кроме хранимок, или запросов, которые...." softwarerХм. Мне казалось, что с этим у MSSQL проблема, разве нет? Хотя и в оракловом механизме есть не только плюсы, но и неудобства. А вот насчет "хочется знать"... честно говоря, не хочется. Предпочитаю действовать так, чтобы не было причин сомневаться. Самописное решение, прикрученное к сборкам и прогонам тестов. В меня, все же, вселяет некоторое спокойствие знание, что все 200.000 строк серверного кода, при активном изменении различных таблиц, процедур и функций ВСЕГДА 1) компилируется 2) при запуске на mock-базе не ломается 3) проходит все тесты 4) соответствует принятым внутри группы sql-конвенциям. andrey_anonymous Проблемы такого рода не возникают при code review (кроме случаев профнепригодности reviewer :). При review они всего лишь выявляются. Да, я и имел это в виду, оговорился. Но если они выявляются , значит, они уже есть . andrey_anonymousСумеет. Человек изобретателен. А вот то, что в нужный момент вполне грамотный специалист не сможет воспользоваться наиболее эффективным подходом к задаче - факт. Просто потому, что не существует универсальных правил "это всегда хорошо, а вот то - заведомо плохо". Ограничивая программистов искусственными рамками, Вы заведомо лишаете команду возможности создать эффективный продукт. Символьную строку он в поле с типом int не запихнет никаким образом, несмотря на всю изобретательность :) А почему ограничиваю - любой запрос (даже динамический) можно в хранимку завернуть. А если при этом придется выдумать хранимке название и описание - то это же не ограничение :). К тому же я специально оговаривал, что "Как раз решая за него (или предлагая решение по умолчанию )". А динамический sql все же БЫВАЮТ ситуации когда работает неэффективнее статического. Могу даже пример вызова 500 раз статического sql против вызова 500 раз динамического sql, даже для Oracle привести (если нужно)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 16:26 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
igorolv PL99Небольшой offtop - а что, это действительно вызывает какие-то проблемы при реализации клиента? Предположим, есть таблица из 10000 записей. ... посмотрим, что нужно решить на стороне с клиента. Для пользователя "визуализировать" как будто у него все данные загружены. 1) Нужно показать пользователю позицию загруженной страницы данных в вертикальной полосе прокрутки. Где в соответствии с текущей сортировкой должен быть поставлен указатель? На первых 10%, 20%, 30%? Что нужно делать, если пользователь взял за ползунок и быстро потянул его вниз?Ваш вопрос понятен. Я отдаю его решение на усмотрение среды разработки. Ползунок при этом (при первом отображении) занимает более 90% высоты "грида". За последние 10 лет претензий по этому поводу слышать не приходилось :-) igorolvК этому же - иногда нужно показать нечто вроде 1342/10342. (Т.е. знать общее количество записей). Если мы загрузили только порцию данных - откуда мы знаем их общее количество? Я допускаю, что такое требование (общее количество записей) может потребоваться в каких-либо аналитических отчетах. Но в отчете так или иначе придется грузить всю выборку (например для печати). Если же обсуждать именно "грид" - то это из серии любой каприз за ваши деньги ;-) igorolv2) Скорее дизайн-соображение: пользователь хочет иметь полный контроль над своими данными. Для него-то нужно представить в гриде дело так, как будто данные все уже загружены. А сделать это гораздо проще, если данные действительно загружены в память.Здесь можно начать обсуждать термин "полный контроль". igorolv3) Есть некоторое подозрение, что при загрузке очередной порции данных сервер будет хоть чуть-чуть, но притормаживать: 1) забрать соединение[а если еще и пула нет - открыть 2) провериться на права доступа 3) запустить запрос на выполнение. 4) дождаться когда можно будет прочитать данные ReadCommited (не стоят ли блокировки какие-нибудь) Запрос уже выполняется - курсор на сервере открыт. Возможно, что подобная реализация нежелательна для MSSQL Server. igorolv 5) загрузить результат в датасет или что-то еще 6) оповестить всех подписчиков на изменение этого датасета или чего-то еще 7) дождаться оживленной реакции подписчиков Т.е. будут постоянно чуть-чуть паузы при работе с таблицей, отображенной в гриде. А если (чур меня) будут проблемы с блокировками - совсем плохо.А это уже задачи клиента igorolv4) Реализация разного рода инкрементальных локаторов в случае постраничной загрузке будет все же подтормаживать "радуя" тем самым пользователя. [Инкрементальный локатор - это когда мы в поле ввода нажимаем "И" + "В" + "А" + "Н" + "О" + "В". и в процессе нажатия на клавиши постепенно отбираем Иванова.] Тут все-таки придется выполнять по запросу на каждое нажатие клавиши - а тут можно не успеть за пользователем. IMHO, это проблема дизайна - поскольку подобный интерфейс преррогатива клиентского приложения, то и позволять выполнять подобные вещи для больших таблиц следует только после того, как пользователь наложил на выборку некие предварительные ограничения. igorolv5) Дизайн-соображение: подозреваю, что как минимум некоторые пользователи предпочтут подождать пару секунд (но не более) при открытии формы, чем ждать по 0.3 секунды (которая может растянуться) при переходе с очередной сотни записей на другую.Думаю, что большинство предпочтет обратное :-) igorolv6) Не очень представляю, как постраничная загрузка может гармонично (как негармонично - вполне представляю :)) сочетаться с гридом, в котором есть древовидная колонка (ID - PARENT_ID).Не понял вопроса. Есть дерево, есть список. В дереве в первый момент показываем первый уровень, при необходимости подтягиваем ветку, которую пользователь раскрывает. Кстати, кроме, пожалуй, справочников, связанных с географическими пунктами или с оргструктурой предприятий других потребностей в организации дерева я не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 17:41 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
igorolv PL99Однажды представитель одного заказчика выразил, на мой взгляд, довольно верную идею - "пусть будет безобразно, но однообразно" :-) IMHO, однообразие того стоит и в этом смысле мне нравится "жесткий процедурный API" У цитаты есть и продолжение безобразно делать мы уже научились :) Однообразие в данном случае - вовсе не обязательно "процедурный API", скорее - единое хранилище sql-кода в системе (с определенными оговорками). Ок, не буду спорить :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 17:42 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
no-userА где и как хранится этот код Хм. Так же, как и во всех остальных случаях. no-userи как две группы разработчиков его используют? Как любую библиотеку или общий модуль. no-userВозьмем, к примеру, две группы Дельфи и PHP кодеров. Зачем мне нужны две эти группы в одном проекте? Специально, чтобы создать себе геморрой? Есть куда более простые способы сделать приложение с двумя мордами. no-userЧто они делают с этим кодом, copy/paste в два разных приложения? Нет, используют. Даже в такой извратной постановке задачу скорее всего можно решить (я не знаю возможности PHP и не возьмусь уверенно утверждать). Решение, скорее всего, будет примерно столь же извратным, как и постановка. no-user использование разработчиками интерфейсов только вызовов ХП решает две проблемы: 1) нельзя сделать одну бизнес операцию двумя разными способами: разработчик интерфейса может пользоваться лишь тем, что ему дали в руки Использование общей библиотеки решает эту проблему как минимум не хуже. no-user 2) документация: API к БД - это - названия ХП типа orderCreate,orderSelect, ,orderItemAdd, orderItemUpdate Не хочется усиливать беседу, ограничусь тем, что общая библиотека опять же - решает эту задачу как минимум не хуже. no-userЕсли бизнес процедура не реализована в ХП - ее нельзя использовать (и разработчик интерфейса не может copy/paste чужой SQL код в свой PHP скрипт). Хм. Вы другие языки знаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 17:48 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
igorolvЭто если 0.1-0.3 секунды. А если программа начинает его НЕ выдерживать Согласен. igorolvА достаточно посмотреть на то, как предлагается реализовывать неполный фетч в MS SQL Посмотрел. Честно говоря, меня это крайне удивило, поскольку по моим воспоминаниям, в форуме дельфи тема всплывала неоднократно, и вроде бы ответы не предусматривали таких сложностей. Из всего названного в FAQ нормально выглядит только четвертый способ. Но судя по комментариям, он глючит :( igorolvЯ и хотел указать, что в данном случае требуется специальный подход. Там требуется не столько специальный подход, сколько непоследовательная навигация по дереву. Да, конечно, в этом случае страничное чтение малоосмысленно. Наверное, можно привести и другие примеры такого рода, например трассировка каких-нибудь проводок. А чтение дерева отдельными запросами просто является лучшим решением по цена/качество. Сложность не слишком больше, а возможности возрастают очень значительно, трюков и геморроя становится куда меньше. igorolv softwarerХм. Мне казалось, что с этим у MSSQL проблема, разве нет? Самописное решение, прикрученное к сборкам и прогонам тестов. Ну, самописное решение легко применить к чему угодно. Пожалуй даже к клиентскому коду легче; написать подпрограмму, которая пробежит по всем data module и сделает open каждому датасету наверное легче, чем вызвать каждую ХП с правильными параметрами (здесь мы пользуемся тем, что в датасетах, по крайней мере дельфовых, легко забить значения параметров в дизайн-тайме). igorolvВ меня, все же, вселяет некоторое спокойствие знание, что все 200.000 строк серверного кода, при активном изменении различных таблиц, процедур и функций ВСЕГДА 1) компилируется 2) при запуске на mock-базе не ломается 3) проходит все тесты 4) соответствует принятым внутри группы sql-конвенциям. Вы плавно переходите к тестированию и контролю качества. Тут уже ответ будет - прогоняем автоматизированные тесты, и проверяем не только компилируемость серверного кода, но и еще кучу вещей. Названная изначально проверка синтаксической корректности серверного кода оказывается далеко позади. igorolvА динамический sql все же БЫВАЮТ ситуации когда работает неэффективнее статического. Безусловно. Тут вопрос свободы выбора: то ли мы можем выбирать свободно, то ли скованы умениями ХП. В результате некоторые приходят к очень веселым (с моей точки) зрения вариантам вида Код: plaintext 1. 2. 3. 4. 5. Смысла в такой хранимке, с моей точки зрения...... то самое единообразное безобразие. Ну и о компилируемости в условиях меняющейся таблицы все равно ничего не скажешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 18:02 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
PL99Кстати, кроме, пожалуй, справочников, связанных с географическими пунктами или с оргструктурой предприятий других потребностей в организации дерева я не вижу. Хм. В одном из проектов я имел дело с классификатором товарных позиций примерно на миллион позиций (точнее, их всего было порядка миллиона, меня интересовало намного меньше, тысяч тридцать). Для моей задачи для работы с ним хватало дерева, для миллиона вообще говоря дерева очень мало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 18:06 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
softwarer Использование общей библиотеки решает эту проблему как минимум не хуже. а какие языки вы можете указать, которые: 1) пригодны для разработки толстого клиента win32 2) пригодны для разработки Web клиента 3) могут использовать общие бибилиотеки? Мне что то кроме Java в голову ничего не приходит. Неужто вы на java интерфейсы строите? softwarer Хм. Вы другие языки знаете? Да я даже PHP не знаю -) Это просто примеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 18:09 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
softwarer igorolv Это уже вопрос, используется в проекте или нет постраничная выборка. У этого решения есть как свои плюсы (скорость), так и минусы (более сложно для реализации, Ээ... не понял. Мне казалось, это везде делается автоматически. Можно конкретный пример, как это сделать постраничный вывод без больших затрат на Oracle? В самом общем виде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 18:10 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
softwarerВопрос "преимущества и недостатки унифицированного подхода против преимуществ и недостатков индивидуально подхода" - классический, вечный вопрос любой инженерной профессии. Имеет он и достаточно универсальный ответ: чем ниже технологический уровень изделия, тем более оправдана унификация и наоборот, чем выше требования к качеству результата, тем тщательнее нужно подходить к каждой детали. Качество результата - вещь весьма спорная, и не раз обсуждалась на этом форуме. Мне кажется, что качественным следует признать разработку, удовлетворяющую требованиям ТЗ. Дополнительное вылизывание кода, как правило, приводит к значительному росту сроков и себестоимости проекта. Однако, я не исключаю, что некоторые части проекта могут разрабатываться на совершенно других принципах, чем, скажем так, принятый в качестве mainstream для большинства разработок. softwarerЖесткий процедурный API в общем случае не позволяет получить изделие приемлимого с моей точки зрения качества. Что для меня закрывает вопрос о нем как о единственном и универсальном методе.Мы опять вернулись к понятию "качество". softwarerРабота у него остается ровно та же самая: визуализировать данные, отстроить пользовательский интерфейс, в нужные моменты вызывать указанные методы. Что внутри этих методов - ХП или "запросы с клиента" - заведомо не должно его волновать, это базовый принцип инкапсуляции. Ок, будем считать, что в прошлый раз я вас неправильно понял :-) softwarerНа какую дальнейшую разработку? Один разработал, другой использует, совершенно нормальная картина. Хотя уже в рамках другого вопроса - я полагаю неправильной ситуацию, когда каждый программист занимается только своим куском и не способен подхватить чужие.Это другой вопрос и по нему с вашей позицией я полностью согласен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 18:15 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
no-userМне что то кроме Java в голову ничего не приходит. Во-первых, мелкософтовская линейка во главе с C#. Во-вторых, библиотеки на C подключаются к чему угодно (по крайней мере, я до сих пор не сталкивался с исключениями). К Java можно подключить любую dll, соответственно писать веб на яве, толстого клиента на чем угодно. Наконец, веб можно свалять и на дельфе; результат конечно будет не то чтобы выдающимся, но веб все равно хорошим не бывает. no-userНеужто вы на java интерфейсы строите? Не, это удовольствие не по мне. Хотя есть любители, и проект с такими требованиями, вполне возможно, я бы им и саутсорсил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 18:17 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Guest 0310Можно конкретный пример, как это сделать постраничный вывод без больших затрат на Oracle? В самом общем виде. Открыть курсор. Взять из него 50 записей. Когда потребуется, взять следующие 50 записей. Далее по индукции. Затрат совершенно никаких. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 18:21 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
PL99Качество результата - вещь весьма спорная, и не раз обсуждалась на этом форуме. Я не предлагаю его обсуждать. Я просто констатирую, что выбор подхода зависит от требуемого качества - в том числе от того, что понимается под качеством в конкретном случае. PL99Мы опять вернулись к понятию "качество". Да, но уже чуть в другом аспекте - том, где я (как технолог) являюсь пользователем и ставлю задачу. Как факт, я сталкиваюсь с пожеланиями пользователей, реализация которых в концепции "все на ХП" приводит к ряду проблем, в том числе упомянутых в этом обсуждении. Как факт, я иногда стимулирую пользователей к таким пожеланиям, поскольку знаю, что они оценят предоставляемые удобства, и это даст существенную экономию в других вопросах (довольный пользователь - человек, с которым приятно и выгодно иметь дело. Поэтому имеет смысл уметь радовать его дешево). Поэтому лично для меня технология "все на ХП" как унифицированный подход, как заведомый выбор для любого проекта, неприемлима. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 18:28 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
softwarer PL99Кстати, кроме, пожалуй, справочников, связанных с географическими пунктами или с оргструктурой предприятий других потребностей в организации дерева я не вижу. Хм. В одном из проектов я имел дело с классификатором товарных позиций примерно на миллион позиций (точнее, их всего было порядка миллиона, меня интересовало намного меньше, тысяч тридцать). Для моей задачи для работы с ним хватало дерева, для миллиона вообще говоря дерева очень мало.Хм ;-) Древовидный классификатор товаров - вещь довольно распространенная, но связана с тем, что постановщики не разобрались в бизнес-процессе и предложили универсальное решение, а о качестве универсальных решений вы недавно отзывались не очень-то восторженно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 18:31 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Я не очень понимаю о чем Вы. У меня использовалось дерево потому (и именно потому), что это было требованием пользователей к моему проекту. Классификатор в целом был фасетным, отнюдь не древовидным. О качестве же универсальных решений я отзывался "всему свое место" - согласен, что это "не слишком восторженно". Насчет преимуществ и недостатков иерархического классификатора в бизнес-процессе не могу судить, мало сталкивался да и неинтересно особо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 18:39 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
softwarer Guest 0310Можно конкретный пример, как это сделать постраничный вывод без больших затрат на Oracle? В самом общем виде. Открыть курсор. Взять из него 50 записей. Когда потребуется, взять следующие 50 записей. Далее по индукции. Затрат совершенно никаких. Именно так и работает Forms, только он еще и назад отматывать умеет без чтения БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 12:51 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
"В кругах, в которых я имею обыкновение вращаться" так работает практически любой инструмент, далеко не только Forms. Включая, разумеется, и двунаправленность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 13:12 |
|
||
|
Изменение таблиц через ХР, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
+ в копилку процедурного подхода При изменении процедуры на сервере (в одном месте) все клиенты автоматически работают по новой/измененной логике. В случае хранения запросов на клиенте придется на всех рабочих местах менять клиентскую часть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 14:21 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34029598&tid=1544980]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
160ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
82ms |
get tp. blocked users: |
3ms |
| others: | 210ms |
| total: | 497ms |

| 0 / 0 |
