|
|
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
Если сказано: "Бизнеслогика приложения должна быть реализована на сервере", то я должен в приложении только выполнять хранимые процедуры реализованные на сервере и анализировать эксепшены которые выдает мне сервер, как результат их выполнения, и уже по этим эксепшенам выдовать пользователю отчет о работе с БД, и не имею права в приложении проверять что, например, поле обязательное к заполнению заполнено не было, или имею права? НО если я имею права, тогда бизнес логика организуеться в приложении а не на сервере. Запутался обьясните как правильнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 10:25 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
Вообще то проверка данных перед записью и бизнес логика - это не синонимы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 10:38 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
GikerЕсли сказано: "Бизнеслогика приложения должна быть реализована на сервере", то я должен в приложении только выполнять хранимые процедуры реализованные на сервере и анализировать эксепшены которые выдает мне сервер, как результат их выполнения, и уже по этим эксепшенам выдовать пользователю отчет о работе с БД, и не имею права в приложении проверять что, например, поле обязательное к заполнению заполнено не было, или имею права? НО если я имею права, тогда бизнес логика организуеться в приложении а не на сервере. Запутался обьясните как правильнее. Поле, обязательное к заполнению, в структуре таблицы БД определяется с условием "NOT NULL"; правильность вставки/удаления/модификации контролируется триггерами автоматически (триггеры хранятся на сервере). Заполнение данных в таблице также производится в хранимых процедурах, которые на клиенте только вызываются; данные передаются в процедуру в качестве параметров... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 10:50 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
Из "Бизнеслогика приложения должна быть реализована на сервере" совсем не обязательно следует что она должна быть реализована в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 11:26 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
Giker"Бизнеслогика приложения должна быть реализована на сервере", Вся Бизнеслогика не может быть реализована на ХП, какая-то часть все равно останется в приложениях. другое дело что само приложение может выполняться на сервере БД сервере приложений клиенте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 11:47 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
Допустим что есть две ситуации: 1. Из таблицы удаляються данные являющиеся родительским ключом к данным в другой таблице. Понятно что сервер выдаст ошибку, которую нужно обработать на клиенте, и выдать пользователю сообщение об ошибке. 2. Если происходит добавление в БД и есть поле NOT NULL, то есть несколько вариантов: А. Проверяем на клиенте что бы данные были введены Б. Проверяем На сервере по условию NOT NULL И если данных нет сервер выдаст ошибку, которую нужно обработать на клиенте, и выдать пользователю сообщение об ошибке. В. А и Б Как правильней? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 12:15 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
ИМХО 2А Т.к. требует минимального программирования на клиенте но хорошо разгружает и сеть и сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 12:31 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
_hike_ИМХО 2А Т.к. требует минимального программирования на клиенте но хорошо разгружает и сеть и сервер. И просаживает сервер, если с ним работает не твой клиент. авторКак правильней? 2В ИМХО ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 12:49 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
Серега а я не говорил что нужно констрейнты или еще какие проверки на сервере отключать ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 14:10 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
_hike_а я не говорил что нужно констрейнты или еще какие проверки на сервере отключать ... Ну дак тогда у тебя должно быть 2В, а ты указал 2А, вот я и решил. Сори. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 14:22 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
Gikerи не имею права в приложении проверять что, например, поле обязательное к заполнению заполнено не было, или имею права? Любую здравую мысль можно довести до абсурда, и процитированное - пример его. Подход с переносом всех проверок в СУБД в принципе имеет право на жизнь, но это пожалуй все хорошее, что о нем можно сказать. Можно утверждать, что при такой реализации невозможно сделать хорошего клиента, максимум "приемлимого". Почему: потому что логика проверки и обработки ошибок ввода существенно зависит от клиента. Например, представьте себе, что данные вводятся с помощью wizard-а - в этом случае верифицировать надо каждую очередную страницу поотдельности, в то время как вызывать ХП следовало бы по финальному OK. То есть оказывается, что серверная логика должна знать о деталях реализации клиента и учитывать их в своей реализации - это нонсенс, извращение. Мой подход таков: большинство проверок, являясь тривиальными, должны быть реализованы и на сервере, и на клиенте. Клиент при этом обеспечивает максимально удобный интерфейс пользователя, невозможный при проверках на сервере, а серверные проверки защищают в основном от ошибок программиста - то есть ошибок в ХП и в клиенте. Сложные проверки, для реализации которых требуются изрядные усилия, делаются только на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 14:31 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
Имеете право и должны проверять - не все, но многое. Основная проблема - меняющаяся логика проверок. Ну так настройку проверяемой формы нужно также хранить на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 14:58 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
Зависит от ситуации. Разумеется, если условия на клиенте можно скопировать с constraint-ов - нужно так делать. Но например, довольно стандартная ситуация - набор обязательных полей зависит от статуса документа. На сервере эти наборы проверяются в соответствующих ХП "изменить статус с А на Б" - а в клиенте может быть удобнее просто реализовать независимо. Да, разумеется возможно реализовать некий конфигурируемый движок проверок, имеющий серверную и клиентскую части, опирающиеся на общую метаинформацию. Но.. у меня не было проектов, где это оказалось бы оптимальным решением [с моей точки зрения]. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 15:28 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
Giker......Как правильней? правильней - в зависимости от чего ? То бишь не ясны критерии. По мне - надёжность и скорость...посему... 1) проверка на клиенте (позволяет оперативно, без обращения к серваку запросить все необходимые данные у клиента, либо из ОЗУ станции и не нагружать сетку).. 2) проверка на серваке...(повышает надёжность операции в целом, самих данных, атомарность и т.д..) сразу замечу - где проходит граница атомарности операции, это не всегда очевидно..требует опыта как мне икается...лакмуссавая бамажка в этом деле - чем просче код, тем правильней...Как нистранно правильно организованный сервак приложения (к примеру) - ведёт именно к УМЕНЬШЕНИЮ кода как на клиенте, так и на сервере... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 15:42 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
kolobok0Как нистранно правильно организованный сервак приложения (к примеру) - ведёт именно к УМЕНЬШЕНИЮ кода как на клиенте, так и на сервере... ... и к ВОЗРАСТАНИЮ кода на сервере приложений ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 16:36 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
Estets... и к ВОЗРАСТАНИЮ кода на сервере приложений ;) увы, лично мой опыт показывает именно уменьшение(!) кода как на клиенте, так и на сервере... только не спрашивайте меня - почему...я если честно - сам до конца не нашёл ответов...но факт на лицо (лично для меня) - если код упрощаеться, в отличие от "плоской модели" - значит сечение клиент-сервер удачное.... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 16:40 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
softwarerЗависит от ситуации. Разумеется, если условия на клиенте можно скопировать с constraint-ов - нужно так делать. Но например, довольно стандартная ситуация - набор обязательных полей зависит от статуса документа. На сервере эти наборы проверяются в соответствующих ХП "изменить статус с А на Б" - а в клиенте может быть удобнее просто реализовать независимо. Да, разумеется возможно реализовать некий конфигурируемый движок проверок, имеющий серверную и клиентскую части, опирающиеся на общую метаинформацию. Но.. у меня не было проектов, где это оказалось бы оптимальным решением [с моей точки зрения]. Мы пошли другим путем метаинформация о том что в данном документе, в данном состоянии такие-то поля являются редактируемыми, а такие-то доступными, хранится на сервере а проверяется на приложении. Бизнес-проверки вынесены в процедуры. А вот constraint-ов и триггеров в базе практически нет. Только в учетном блоке где проводки, чтоб ни при каких условиях не развалить баланс. Считаю данный подход для себя оптимальным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 16:48 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
Бред какой то… На клиенте в идеале не должно быть кода вообще! Но люди уроды поэтому на клиенте сидит код который отлавливает ошибки ввода или осуществляет подсказки пользователю или оказывает помощь в настройки перед запросом к серверу… всё это исключительно интерфейс… Простой пример код который запрещает ввод не цифр в поле для цифр :) Проверка подлинности клиента правильности его желаний и из выполнения все должно быть на сервере… и не обязательно в процедурах… это как у кого тиль кодинга… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 16:51 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
Это да. Без людей то оно б куды как проще было бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 17:25 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
EstetsМы пошли другим путем метаинформация о том что в данном документе, в данном состоянии такие-то поля являются редактируемыми, а такие-то доступными, хранится на сервере а проверяется на приложении. Тут всплывает та же проблема, которую Вы описывали чуть ранее - а что если задача малость нестандартна и надо делать новую настройку. Что, если поле должно обрабатываться нестандартным компонентом-редактором. Итп. Другой аспект, возможно, связан с технологией - в дельфе часто удобно сделать компонент, хранящий такие настройки и берущий на себя их выполнение. Это куда удобнее, нежели в какой-то программе заполнять конфигурационную таблицу на сервере. Конечно, можно научить этот компонент держать свои настройки в БД, но минусов у этого скорее больше чем плюсов. Впрочем, в любом случае здесь надо смотреть по месту, универсально лучших решений не существует. EstetsБизнес-проверки вынесены в процедуры. Что есть бизнес-проверки? Если проверки уровня "дата начала должна быть меньше даты конца" - повторюсь; я не думаю, что таким образом можно сделать хороший интерфейс с разумными трудозатратами. См. пример с визардом. EstetsА вот constraint-ов и триггеров в базе практически нет. Только в учетном блоке где проводки, чтоб ни при каких условиях не развалить баланс. Хм. Звучит так, словно остальную базу можно разваливать :) EstetsСчитаю данный подход для себя оптимальным. Безусловно, надо смотреть по ситуации. Но я крайне трепетно отношусь к качеству данных в БД, поэтому в конкретной ситуации вряд ли согласился бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 22:01 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
softwarer EstetsМы пошли другим путем метаинформация о том что в данном документе, в данном состоянии такие-то поля являются редактируемыми, а такие-то доступными, хранится на сервере а проверяется на приложении. Тут всплывает та же проблема, которую Вы описывали чуть ранее - а что если задача малость нестандартна и надо делать новую настройку. Что, если поле должно обрабатываться нестандартным компонентом-редактором. Итп. Нестандартная задача тебует нестандартного решения ;) Мы пошли по пути стандартизации, т.е. пока поле не описано в настройке документа(метаинформация) оно в базе не сушествует. Правда до того что дошла Axapta, что поле удаляется физически если его удалить из насторйки мы не дошли. softwarer Другой аспект, возможно, связан с технологией - в дельфе часто удобно сделать компонент, хранящий такие настройки и берущий на себя их выполнение. Это куда удобнее, нежели в какой-то программе заполнять конфигурационную таблицу на сервере. Конечно, можно научить этот компонент держать свои настройки в БД, но минусов у этого скорее больше чем плюсов. У нас 90% автогенеримых процедут по поддержке общения с базой. Так что в данном контексте это удобнее. softwarer EstetsБизнес-проверки вынесены в процедуры. Что есть бизнес-проверки? Если проверки уровня "дата начала должна быть меньше даты конца" - повторюсь; я не думаю, что таким образом можно сделать хороший интерфейс с разумными трудозатратами. См. пример с визардом. Не совсем согласен, приведу другой пример. Пока документ находится в состоянии "редактируется", большинство его полей может быть не заполнено. Оператор может множество раз открывать его, исправлять, дозаполнять. Все бизнес-проверки начиная от "дата начала должна быть меньше даты конца" до может ли клиент уйти в минус при расчете комиссий, и разрешена ли ему короткая позиция при продаже ЦБ ;) вычисляется в момент перехода документа из состояния "редактируется" в состояние "исполнено". softwarer EstetsА вот constraint-ов и триггеров в базе практически нет. Только в учетном блоке где проводки, чтоб ни при каких условиях не развалить баланс. Хм. Звучит так, словно остальную базу можно разваливать :) Ну чисто теоретически да, практически все количественные и суммовые отчеты строятся с использованием проводок, и главное что-бы они были правильные. А первичные документы, на основе которых они созданы теоретически по истечении строка хранения могут быть удалены. softwarerБезусловно, надо смотреть по ситуации. Но я крайне трепетно отношусь к качеству данных в БД, поэтому в конкретной ситуации вряд ли согласился бы. Часто приходилось сталкиваться, особенно при внедрении продуктов, что информация которую можно было вытащить из старых систем была неполная, и приходилось с этим мириться. Соответственно несколько полей обязательных к заполнению в новой системе в старой отсутствовали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2006, 11:16 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
123423 На клиенте в идеале не должно быть кода вообще! Но люди уроды поэтому на клиенте сидит код который отлавливает ошибки ввода или осуществляет подсказки пользователю или оказывает помощь в настройки перед запросом к серверу… всё это исключительно интерфейс… Согласен, все что можно проверить на клиенте, не обращаясь к серверу, желательно проверять на клиенте. Если требуется получать данные с сервера, по справочникам, лимитам, остаткам. То желательно это на сервере и проверять. Единственное исключение из данного правила у нас, как я упоминал выше, получение с сервера, при открытии редактора данных о редактируемости-обязательности полей. И то это связано с тем что эта информация может динамически меняться для данного экземплята документа, в зависимости от его текущего состояния. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2006, 11:23 |
|
||
|
Вопрос по проектированию
|
|||
|---|---|---|---|
|
#18+
EstetsНестандартная задача тебует нестандартного решения ;) Мы пошли по пути стандартизации, Не возражаю, можно так идти. Соотношение цены и результата здесь имхо зависит от конкретных условий, "вообще" трудно что-то сказать. EstetsУ нас 90% автогенеримых процедут по поддержке общения с базой. Так что в данном контексте это удобнее. 1. Я не понимаю, как этот Ваш ответ связан со сказанным мной. Я сказал: "да, можно научить". Вы говорите: "у нас научили". Я говорю: "но по сравнению с нормальным для дельфы решением это будет менее удобно". Вы говорите: "так что удобнее". 2. Я плохо отношусь к автогенеримому коду и полагаю, что единственный случай, когда он оправдан - убогие инструменты, не позволяющие решить задачу нормально. Но это отдельная тема, в которую вряд ли стоит особо углубляться. Estets softwarer..... См. пример с визардом. Не совсем согласен, приведу другой пример. Хм. Если мы говорим об универсальной технологии, примеры, когда она работает хорошо никак не перекрывают примеров, когда она работает плохо. Она обязана либо [практически всегда] работать хорошо, либо же не будет универсальной. EstetsПока документ находится в состоянии "редактируется", большинство его полей может быть не заполнено. Оператор может множество раз открывать его, исправлять, дозаполнять. Все бизнес-проверки начиная от "дата начала должна быть меньше даты конца" до может ли клиент уйти в минус при расчете комиссий, и разрешена ли ему короткая позиция при продаже ЦБ ;) вычисляется в момент перехода документа из состояния "редактируется" в состояние "исполнено". И? Не очень понял, что показывает этот пример. Да, так можно делать. При этом никто не мешает сделать проверку грамотно: еще в состоянии "редактируется", если заполнены обе даты и дата начала больше - ругаться. Потому как одно дело "еще не заполнено", другое - "уже заполнено криво". Какая разница между этими вариантами.... мне вспоминаются старые компиляторы. Когда-то работа с диалоговыми комплексами шла примерно так: написал код, запускаешь компилятор, он показывает ошибку. Запускаешь редактор, исправляешь ее, выходишь из редактора, запускаешь компилятор, он показывает следующую ошибку. Было очень неудобно. Были хорошие компиляторы - которые показывали разом несколько ошибок, если могли продолжить компиляцию, пропустив ошибочный кусок. Это здорово ускоряло процесс. А сейчас компилятор показывает некоторые ошибки прямо в ходе набора текста - и оно еще удобнее. Estets softwarerХм. Звучит так, словно остальную базу можно разваливать :) Ну чисто теоретически да Тогда это пожалуй не очень интересный случай. Сродни "печатаю слепым методом. 850 знаков в минуту..." EstetsЧасто приходилось сталкиваться, особенно при внедрении продуктов, что информация которую можно было вытащить из старых систем была неполная, и приходилось с этим мириться. Соответственно несколько полей обязательных к заполнению в новой системе в старой отсутствовали. Это вовсе не обязано мешать проверкам целостности на сервере. Простой вариант: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. В более сложном, когда подобная функциональность отсутствует - никто не мешает сделать в таблице флажок "старых данных" и создавать таблицу примерно так: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2006, 14:31 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33607419&tid=1545348]: |
0ms |
get settings: |
11ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
170ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
87ms |
get tp. blocked users: |
1ms |
| others: | 269ms |
| total: | 578ms |

| 0 / 0 |
