|
|
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
Где, по вашему, пролегает граница между серверной и клиентской логикой? Какие функции целесообразно переносить на клиента, какие оставлять на сервере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2005, 16:24 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
AlexGГде, по вашему, пролегает граница между серверной и клиентской логикой? Какие функции целесообразно переносить на клиента, какие оставлять на сервере? По моему мнению границ не существует и существовать не может. В том и прелесть данной технологии, что центр тяжести обработки данных мона перенести, разбить, скрыть. Лично для себя определил критерий "не правильной архитектуры" : - если код усложняется, см. разбиение функционала между клиентом и серваком. Есть конечно же рамки, в которых и "плаваешь". Например тонкий клиент... Либо база такая-то. Либо язык реализации такой-то. есть ещё куча "мелких" аспектов, но они эээээээээ скажем так - выступают как дополнительные бонусы которые система должна решать. Оптимум - удовлетворение всех потребностей. Возглавляют список как правило: секьюрити, транзакционность, блокировки логические и физические, ударная прочность, отказоустойчивость, скорость ну и т.д.. Всё это нужно прогнать в Вашей архитектуре сервака (а она может меняться в зависимости от поставленной задачи) и улучшить тонкие места (тип БД, способ работы с БД, политика безопасности, политика отработки ошибок - логических и физических и т.д..). Потом итерационно - отшлифовывая результат... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2005, 16:44 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
авторГде, по вашему, пролегает граница между серверной и клиентской логикой? Какие функции целесообразно переносить на клиента, какие оставлять на сервере? Все, что можно, должно обрабатываться на сервере. Все остальное, но не более 10% :) - на клиенте. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2005, 17:22 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
AlexGГде, по вашему, пролегает граница между серверной и клиентской логикой? Какие функции целесообразно переносить на клиента, какие оставлять на сервере?Действительно, формально определить границу очень сложно, но все то, чем стоит управлять централизованно (ограничения целостности, общие для многих клиентов расчетные алгоритмы и т.п.) стоит держать на сервере. По максимуму возможного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2005, 17:55 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
Ну граница-то понятна. По принципу, где код выполняется. А вот что серверу, а что клиенту - интересный вопрос. Больше всего меня всегда напрягает, где делать проверку корректности данных. С одной стороны, если делать на сервере, то возникает лишний трафик и телодвижения сервера. И пользователю неудобно. Я могу перехватить сообщение об ошибке и внятно объяснить в чем юзер не прав, но юзер зря тратит время. С другой стороны, зашитые на клиенте правила могут и измениться. Часто делаю компромис. Проверка заполнения обязательных полей - на клиенте. Проверка условно-постоянных диапазонов значений - на клиенте. Это вроде, что не может быть 25-го месяца. Но все больше и больше принимаю принцип препроверки на сервере. После изменения какого-то поля на форме идет запрос на сервер, который и выдает ответ - можно или не ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2005, 22:18 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
Во-во, меня тоже напрягает... Поэтому ВСЕ проверки я решил перенести на сервер... Чтобы сохранить целостность базы. А на клиенте, да, остается проверять только 25 месяц :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2005, 23:30 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
Cat2Больше всего меня всегда напрягает, где делать проверку корректности данных.Мое мнение и практика таковы. Проверку корректности надо делать и на сервере, и на клиенте. Проверка на сервере -- это последний "бастион" на пути некорректных данных. Ведь данные на сервер могут попадать в обход данной клиентской программы: через другие виды клиентских приложений, да тупо через программы администрирования (типа QA или EM в MS SQL Server), а DBA -- он тоже человек, может легко ошибиться. Кроме того, клиентская программа не сразу рождается отлаженная и правильная. Пока ее отлаживают, она может из-за ошибок всякого трэша в БД навалить. А если сервер проверяет ОЦ, то он многие ошибки сразу обломит. Да ведь и отлаживать клиента насколько легче: прилетел эксепш от СУБД: вот она, ошибочка, сядем да код поправим. А если СУБД ошибки не сигналит, то их и на клиенте поди найди, в сто раз дольше и сложнее. В то же время максимум ошибок надо отсекать сразу на клиенте. Уменьшается траффик (некоррентные данные на СУБД не летят, ошибка обратно не летит), экономится время. Да и пояснения об ошибке на клиенте можно сделать куда как более понятные и наглядные пользователю, чем невнятное (и часто англоязычное) сообщение с сервера. Хотя наилучший вариант --- чтобы некоррентные данные вообще было нереально ввести и невозможно даже отправить на сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2005, 06:47 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
ИМХО есть и такой аспект. Для чего пишется программа - для себя и под себя или на продажу. Т.е. контролирую ли я ситуацию с программой/БД на 100% или не контролирую вовсе. Если первое, то граница в принципе умозрительна. Если второе, то желательно по максимуму выносить все на сервер. Опыта "продажных" программ у меня меньше, чем "для себя" (АСУчивал родную контору), поэтому я для себя выделил такое "правило". Сравниваются объемы инфы на входе функции и на выходе. Чем больше на входе и меньше на выходе тем больше нужность вынесения этого на сервер - типа экономия трафика и все такое. Повторюсь, это для ситуации, когда я полностью контролирую и базу и программу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2005, 09:47 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
Можно что угодно делать - писать тиражные продукты или под себя, пытаться экономить трафик (интересно как это можно сделать, перенося логику проверок и расчетов на клиента), делать еще что то - но есть очень важное правило - целостность, правильность и непротиворечивость данных должна быть гарантирована на уровне сервера. И точка. Иначе потом приходится видеть программы, где сальдо противоречит приходу и расходу, где в таблицах лежат данные, которых просто быть не может. Я всегда делаю просто: 1. Сервер последняя инстанция - вся логика проверок и расчетов лежит только на нем. Так же это правило гарантирует защиту не только от ошибок юзеров, но и от ошибок в клиентском приложении, т.е. от кодеров и является для них тестом на корректность работы клиента. 2. В клиентское приложение встраиваю только логику проверок и только в рамках правил, что эта логика во первых не усложняет код клиента, во вторых не дает нагрузок на сервер, в третьих позволяет сминимизировать откаты транзакций, т.е. неудачных сохранений. В остальных случаях, если хотя бы один пункт нарушен, я отдаю проверки на сервер, таким образом экономя время разработки клиента и его стоимость разработки сопровождения. P.S. Ну а насчет трафика - что то я не очень понимаю, какой такой трафик ? Юзеры что, со скоростью миллион записей в секунду данные вносят ? Получили набор данных, провели все нужные изменения в режиме отложенных изменений, в рамках транзакции сохранили все изменения. Трафик на сессию минимальный. У меня лично клиентские приложения вполне спокойно себя чувствуют при работе с удаленными серверами через GPRS посредством интернета, с включенным режимом криптографии и сжатии протокола на СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2005, 10:02 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
ASCRUS Не все действия с БД влияют на целостность. Например несложный расчет чего либо может лопатить пол базы и выдавать одну страницу отчета. Тут прямая дорога выполнять это на серваке. Для другого отчета требуемой информации может быть примерно столько, сколько и выдаваемой, но сам расчет трудоемкий. Я не вижу причины, что бы не забрать инфу с сервера на клиента и крутить там сколько вздумается не мешая остальным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2005, 10:34 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
Серега ASCRUS Не все действия с БД влияют на целостность. Например несложный расчет чего либо может лопатить пол базы и выдавать одну страницу отчета. Тут прямая дорога выполнять это на серваке. Для другого отчета требуемой информации может быть примерно столько, сколько и выдаваемой, но сам расчет трудоемкий. Я не вижу причины, что бы не забрать инфу с сервера на клиента и крутить там сколько вздумается не мешая остальным. Если логика не влияет на целостостность данных - те же отчеты, то они и должны крутиться на клиенте. Здесь сервер участвует ровно настолько, чтобы клиентское приложение не замучало его серией запросов - легче написать одну ХП, чем для подготовки данных для построения отчета посылать серию запросов на сервер, которые не только влияют на производительность и нагрузки сервера, но еще и такие важные вещи, как блокировки в зависимости от уровеня изоляции. А вот все остальное должен делать исключительно клиент - было бы дико пытаться на сервере построить тот же кросстаб, вместо того, чтобы отдать это на откуп отчетнику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2005, 10:46 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
ASCRUS. Целостность и непротиворечивость - священная корова. И разумеется ее должен обеспечивать сервер. Но есть и другой род ошибок пользователя - недопустимые по бизнес-логике значения. Многие из них можно, и на мой взгляд нужно, отлавливать еще на клиенте. Допустим, моя прога введена в эксплуатацию в 2005 году. Следовательно даты текущих операций могут быть не менее 20050101 и не более сегодняшнего дня. Почему бы это не проверить на клиенте? Что бы юзер не ввел дату 01.01.0200. Причем эта дата вполне корректна и никак не влияет на целостность и безопасность. Или если юзер не ввел обязательного значения, то это ему вполне может напомнить клиент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2005, 16:59 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
Cat2ASCRUS. Целостность и непротиворечивость - священная корова. И разумеется ее должен обеспечивать сервер. Но есть и другой род ошибок пользователя - недопустимые по бизнес-логике значения. Многие из них можно, и на мой взгляд нужно, отлавливать еще на клиенте. Допустим, моя прога введена в эксплуатацию в 2005 году. Следовательно даты текущих операций могут быть не менее 20050101 и не более сегодняшнего дня. Почему бы это не проверить на клиенте? Что бы юзер не ввел дату 01.01.0200. Причем эта дата вполне корректна и никак не влияет на целостность и безопасность.Или если юзер не ввел обязательного значения, то это ему вполне может напомнить клиент. Пожалуйста, я только ЗА - если проверка даты текущих операций не повлечет за собой сложные или частые запросы на сервер, пусть клиент проверяет. А вот если повлечет, то сервер по любому проверять будет - не стоит его дважды загружать одной и той же работой, которая сказывается на ресурсах, производительности или блокировках. Ну а проверить корректность даты, обязательное поле, сделать Lookup, чтобы клиент не мог внести неправильного FK и прочее - это локальное и само собой разумеющееся, странно было бы видеть клиентское приложение, которое бы этого не делало, тут даже интернет-приложения стараются следовать этим правилам, хотя это и усложняет разработку на том же PHP из за ввода в HTML проверок на JavaScript и я считаю это усложнение в таких случаях оправданным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2005, 17:10 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
mirМое мнение и практика таковы. Проверку корректности надо делать и на сервере, и на клиенте. Поддерживаю. Я придерживаюсь следующего принципа: то, что можно достаточно легко проверить на клиенте, должно быть проверено на клиенте. Есть проверки, которые можно сделать только в ходе выполнения операции; такие, разумеется, нужно делать на сервере в ходе выполнения хранимки и возвращать как исключения. Возврат с сервера ошибки типа foreign key not found, unique constraint violation итп. я рассматриваю как безусловную ошибку в программе. То есть такие оборачиваются в исключение типа internal application error и никак специально не укращаются (не переводятся на русский итп); если для кого они и предназначены, то для администратора и разработчика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 11:52 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
tygra авторГде, по вашему, пролегает граница между серверной и клиентской логикой? Какие функции целесообразно переносить на клиента, какие оставлять на сервере? Все, что можно, должно обрабатываться на сервере. Все остальное, но не более 10% :) - на клиенте. -- Tygra's -- не соглашусь. нужно помнить что ввиде сервака может выступать простой комп, который просто засыпиться если на него все свалить! полностью соглашусь с softwarer, что легко пролетит на клиенте , несколько секунд, то и пуска на клиенте вариться... хотя аспектов дествительно дофига и нужно смотреть в конкретном случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 16:59 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
msn13. Зря не соглашаетесь. Окончательную проверку должен делать сервер. А клиент - только первая линия обороны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 17:11 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
msn13нужно помнить что ввиде сервака может выступать простой комп, который просто засыпиться если на него все свалить! Может тогда вспомним 486 компьютеры в виде клиентов? :)) msn13 полностью соглашусь с softwarer, что легко пролетит на клиенте , несколько секунд, то и пуска на клиенте вариться... Он говорил про проверки , а не про все вообще авторхотя аспектов дествительно дофига и нужно смотреть в конкретном случае. Нет таких аспектов. Dculf один и тот же подход -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 17:11 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
Очепятка: Всегда один и тот же подход -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 17:12 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
Согласен с тигрой и ASCRUS. Весь контроль д.быть на сервере и кое что дублировано на клиенте. Представьте ситуацию, когда контроль находится клиенте и появляется новое приложение, написанное не вами на ту же БД. Или Вы уволились и старого клиента модифицирует кто-то менее грамотный, чем вы. О дубле контроля в клиенте - исключительно из уважения к юзеру. Можно давать более понятные сообщения - сервер не знает что видит юзер, а клиент знает. Контроль в клиенте позволяет делать более ранние перехваты ошибок юзера. Что касается запросов, в клиенте стоит оставлять только мелочишку, остальное - на сервер - получается гораздо себе дешевле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 17:14 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
Cat2msn13. Зря не соглашаетесь. Окончательную проверку должен делать сервер. А клиент - только первая линия обороны. обана, а где сказано про проверки? я имел ввиду всю логику >tygra Он говорил про проверки, а не про все вообще. ну здесь я имел ввиду идею, что не фиг все валить на сервак а 486 можно и не вспоминать, у нас например пень2,4 с озу 2Г(раньше был 1Г) и постоянно забит на 70-80 %.... так что и это надо учитывать (пусть это и будет единственный аспект ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 20:48 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
Кстати, по поводу создания внятных сообщений на клиенте - все можно и на сервере: так как все операции ч/з ХП, то в них в блоке обработки исключений (Oracle - правда говорят, что теперь и в Юконе исключения появились) вызывается процедура условно названная SendUserError, в которую передается код исключения. Она лезет в таблицу, а далее делает raise_application_error с понятным пользователю сообщением. На клиенте в обработчике ошибок вырезается из него служебная инфа (ORA-<код ошибки>:) и пользователь видит понятное сообщение об ошибке на нужном ему языке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 10:21 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
msn13ну здесь я имел ввиду идею, что не фиг все валить на сервак А зачем тогда он по вашему нужен, сервак то? -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 10:49 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
Cat2msn13. Зря не соглашаетесь. Окончательную проверку должен делать сервер. А клиент - только первая линия обороны. А практикуется ли третья линия обороны? она должна быть точно на сервере (на каком-то сервере - веб, СУБД, приложений, etc - это вопрос архитектуры), но выполняется фоново, так как ее проверки связаны с проверкой семантических связей, неявных. Когда связь между данными из разных СУБД, когда одно то же поле может быть идентификатором разных таблиц (возмжно хранящися в разных СУБД). Вот руки никак не доходят сделать такие проверки системными. Они носят у нас скорее отрывочный характер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 12:10 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
Cat2msn13. Зря не соглашаетесь. Окончательную проверку должен делать сервер. А клиент - только первая линия обороны. Безусловно. И чем это "зря не соглашаетесь"? Я бы сказал, клиент - первая и основная линия обороны, сервер - в основном резервная. Проверки на сервере защищают в первую очередь от ошибок программиста, от сопровождающих, лезущих в базу мимо сервера итп. Вообще говоря в нормальной ситуации эти проверки срабатывать не должны, исключая те самые отдельные проверки, которые делать на клиенте плохо и не удобно. В принципе может быть поставлен вопрос о последующем отключении проверок на сервере в целях быстродействия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 13:46 |
|
||
|
Серверная и клиентская логика - где граница?
|
|||
|---|---|---|---|
|
#18+
ShtockКстати, по поводу создания внятных сообщений на клиенте - все можно и на сервере: Теоретически - можно, практически - плохо. Например, форма ввода данных состоит из нескольких страниц (закладок); если параметры введены с ошибкой, клиентское приложение должно переключиться на соответствующую закладку, поставить курсор на соответствующее поле ввода и написать что-нибудь типа "дата должна быть не раньше 01.01.2000". Если проверка данных идет на сервере, реализовать соответствующую механику становится довольно напряжно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 13:50 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33434310&tid=1545498]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
186ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 487ms |

| 0 / 0 |
