powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Серверная и клиентская логика - где граница?
25 сообщений из 72, страница 1 из 3
Серверная и клиентская логика - где граница?
    #33425564
AlexG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где, по вашему, пролегает граница между серверной и клиентской логикой? Какие функции целесообразно переносить на клиента, какие оставлять на сервере?
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33425625
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexGГде, по вашему, пролегает граница между серверной и клиентской логикой? Какие функции целесообразно переносить на клиента, какие оставлять на сервере?

По моему мнению границ не существует и существовать не может. В том и прелесть данной технологии, что центр тяжести обработки данных мона перенести, разбить, скрыть.

Лично для себя определил критерий "не правильной архитектуры" :
- если код усложняется, см. разбиение функционала между клиентом и серваком.
Есть конечно же рамки, в которых и "плаваешь". Например тонкий клиент... Либо база такая-то. Либо язык реализации такой-то.

есть ещё куча "мелких" аспектов, но они эээээээээ скажем так - выступают как дополнительные бонусы которые система должна решать. Оптимум - удовлетворение всех потребностей. Возглавляют список как правило: секьюрити, транзакционность, блокировки логические и физические, ударная прочность, отказоустойчивость, скорость ну и т.д.. Всё это нужно прогнать в Вашей архитектуре сервака (а она может меняться в зависимости от поставленной задачи) и улучшить тонкие места (тип БД, способ работы с БД, политика безопасности, политика отработки ошибок - логических и физических и т.д..). Потом итерационно - отшлифовывая результат...


с уважением
(круглый)
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33425738
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторГде, по вашему, пролегает граница между серверной и клиентской логикой? Какие функции целесообразно переносить на клиента, какие оставлять на сервере?
Все, что можно, должно обрабатываться на сервере.
Все остальное, но не более 10% :) - на клиенте.

-- Tygra's --
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33425818
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexGГде, по вашему, пролегает граница между серверной и клиентской логикой? Какие функции целесообразно переносить на клиента, какие оставлять на сервере?Действительно, формально определить границу очень сложно, но все то, чем стоит управлять централизованно (ограничения целостности, общие для многих клиентов расчетные алгоритмы и т.п.) стоит держать на сервере. По максимуму возможного.
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33426186
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ну граница-то понятна. По принципу, где код выполняется. А вот что серверу, а что клиенту - интересный вопрос.

Больше всего меня всегда напрягает, где делать проверку корректности данных. С одной стороны, если делать на сервере, то возникает лишний трафик и телодвижения сервера. И пользователю неудобно. Я могу перехватить сообщение об ошибке и внятно объяснить в чем юзер не прав, но юзер зря тратит время. С другой стороны, зашитые на клиенте правила могут и измениться. Часто делаю компромис. Проверка заполнения обязательных полей - на клиенте. Проверка условно-постоянных диапазонов значений - на клиенте. Это вроде, что не может быть 25-го месяца.
Но все больше и больше принимаю принцип препроверки на сервере. После изменения какого-то поля на форме идет запрос на сервер, который и выдает ответ - можно или не
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33426229
minva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-во, меня тоже напрягает... Поэтому ВСЕ проверки я решил перенести на сервер... Чтобы сохранить целостность базы. А на клиенте, да, остается проверять только 25 месяц :-)
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33426362
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Больше всего меня всегда напрягает, где делать проверку корректности данных.Мое мнение и практика таковы. Проверку корректности надо делать и на сервере, и на клиенте. Проверка на сервере -- это последний "бастион" на пути некорректных данных. Ведь данные на сервер могут попадать в обход данной клиентской программы: через другие виды клиентских приложений, да тупо через программы администрирования (типа QA или EM в MS SQL Server), а DBA -- он тоже человек, может легко ошибиться. Кроме того, клиентская программа не сразу рождается отлаженная и правильная. Пока ее отлаживают, она может из-за ошибок всякого трэша в БД навалить. А если сервер проверяет ОЦ, то он многие ошибки сразу обломит. Да ведь и отлаживать клиента насколько легче: прилетел эксепш от СУБД: вот она, ошибочка, сядем да код поправим. А если СУБД ошибки не сигналит, то их и на клиенте поди найди, в сто раз дольше и сложнее.

В то же время максимум ошибок надо отсекать сразу на клиенте. Уменьшается траффик (некоррентные данные на СУБД не летят, ошибка обратно не летит), экономится время. Да и пояснения об ошибке на клиенте можно сделать куда как более понятные и наглядные пользователю, чем невнятное (и часто англоязычное) сообщение с сервера. Хотя наилучший вариант --- чтобы некоррентные данные вообще было нереально ввести и невозможно даже отправить на сервер.
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33426583
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО есть и такой аспект. Для чего пишется программа - для себя и под себя или на продажу. Т.е. контролирую ли я ситуацию с программой/БД на 100% или не контролирую вовсе. Если первое, то граница в принципе умозрительна. Если второе, то желательно по максимуму выносить все на сервер.
Опыта "продажных" программ у меня меньше, чем "для себя" (АСУчивал родную контору), поэтому я для себя выделил такое "правило". Сравниваются объемы инфы на входе функции и на выходе. Чем больше на входе и меньше на выходе тем больше нужность вынесения этого на сервер - типа экономия трафика и все такое. Повторюсь, это для ситуации, когда я полностью контролирую и базу и программу.
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33426627
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно что угодно делать - писать тиражные продукты или под себя, пытаться экономить трафик (интересно как это можно сделать, перенося логику проверок и расчетов на клиента), делать еще что то - но есть очень важное правило - целостность, правильность и непротиворечивость данных должна быть гарантирована на уровне сервера. И точка. Иначе потом приходится видеть программы, где сальдо противоречит приходу и расходу, где в таблицах лежат данные, которых просто быть не может. Я всегда делаю просто:
1. Сервер последняя инстанция - вся логика проверок и расчетов лежит только на нем. Так же это правило гарантирует защиту не только от ошибок юзеров, но и от ошибок в клиентском приложении, т.е. от кодеров и является для них тестом на корректность работы клиента.
2. В клиентское приложение встраиваю только логику проверок и только в рамках правил, что эта логика во первых не усложняет код клиента, во вторых не дает нагрузок на сервер, в третьих позволяет сминимизировать откаты транзакций, т.е. неудачных сохранений. В остальных случаях, если хотя бы один пункт нарушен, я отдаю проверки на сервер, таким образом экономя время разработки клиента и его стоимость разработки сопровождения.

P.S. Ну а насчет трафика - что то я не очень понимаю, какой такой трафик ? Юзеры что, со скоростью миллион записей в секунду данные вносят ? Получили набор данных, провели все нужные изменения в режиме отложенных изменений, в рамках транзакции сохранили все изменения. Трафик на сессию минимальный. У меня лично клиентские приложения вполне спокойно себя чувствуют при работе с удаленными серверами через GPRS посредством интернета, с включенным режимом криптографии и сжатии протокола на СУБД.
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33426721
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
Не все действия с БД влияют на целостность. Например несложный расчет чего либо может лопатить пол базы и выдавать одну страницу отчета. Тут прямая дорога выполнять это на серваке.
Для другого отчета требуемой информации может быть примерно столько, сколько и выдаваемой, но сам расчет трудоемкий. Я не вижу причины, что бы не забрать инфу с сервера на клиента и крутить там сколько вздумается не мешая остальным.
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33426750
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серега ASCRUS
Не все действия с БД влияют на целостность. Например несложный расчет чего либо может лопатить пол базы и выдавать одну страницу отчета. Тут прямая дорога выполнять это на серваке.
Для другого отчета требуемой информации может быть примерно столько, сколько и выдаваемой, но сам расчет трудоемкий. Я не вижу причины, что бы не забрать инфу с сервера на клиента и крутить там сколько вздумается не мешая остальным.
Если логика не влияет на целостостность данных - те же отчеты, то они и должны крутиться на клиенте. Здесь сервер участвует ровно настолько, чтобы клиентское приложение не замучало его серией запросов - легче написать одну ХП, чем для подготовки данных для построения отчета посылать серию запросов на сервер, которые не только влияют на производительность и нагрузки сервера, но еще и такие важные вещи, как блокировки в зависимости от уровеня изоляции. А вот все остальное должен делать исключительно клиент - было бы дико пытаться на сервере построить тот же кросстаб, вместо того, чтобы отдать это на откуп отчетнику.
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33428028
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ASCRUS.
Целостность и непротиворечивость - священная корова. И разумеется ее должен обеспечивать сервер. Но есть и другой род ошибок пользователя - недопустимые по бизнес-логике значения. Многие из них можно, и на мой взгляд нужно, отлавливать еще на клиенте. Допустим, моя прога введена в эксплуатацию в 2005 году. Следовательно даты текущих операций могут быть не менее 20050101 и не более сегодняшнего дня. Почему бы это не проверить на клиенте? Что бы юзер не ввел дату 01.01.0200. Причем эта дата вполне корректна и никак не влияет на целостность и безопасность. Или если юзер не ввел обязательного значения, то это ему вполне может напомнить клиент.
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33428071
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2ASCRUS.
Целостность и непротиворечивость - священная корова. И разумеется ее должен обеспечивать сервер. Но есть и другой род ошибок пользователя - недопустимые по бизнес-логике значения. Многие из них можно, и на мой взгляд нужно, отлавливать еще на клиенте. Допустим, моя прога введена в эксплуатацию в 2005 году. Следовательно даты текущих операций могут быть не менее 20050101 и не более сегодняшнего дня. Почему бы это не проверить на клиенте? Что бы юзер не ввел дату 01.01.0200. Причем эта дата вполне корректна и никак не влияет на целостность и безопасность.Или если юзер не ввел обязательного значения, то это ему вполне может напомнить клиент.
Пожалуйста, я только ЗА - если проверка даты текущих операций не повлечет за собой сложные или частые запросы на сервер, пусть клиент проверяет. А вот если повлечет, то сервер по любому проверять будет - не стоит его дважды загружать одной и той же работой, которая сказывается на ресурсах, производительности или блокировках. Ну а проверить корректность даты, обязательное поле, сделать Lookup, чтобы клиент не мог внести неправильного FK и прочее - это локальное и само собой разумеющееся, странно было бы видеть клиентское приложение, которое бы этого не делало, тут даже интернет-приложения стараются следовать этим правилам, хотя это и усложняет разработку на том же PHP из за ввода в HTML проверок на JavaScript и я считаю это усложнение в таких случаях оправданным.
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33432513
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mirМое мнение и практика таковы. Проверку корректности надо делать и на сервере, и на клиенте.
Поддерживаю. Я придерживаюсь следующего принципа: то, что можно достаточно легко проверить на клиенте, должно быть проверено на клиенте. Есть проверки, которые можно сделать только в ходе выполнения операции; такие, разумеется, нужно делать на сервере в ходе выполнения хранимки и возвращать как исключения.

Возврат с сервера ошибки типа foreign key not found, unique constraint violation итп. я рассматриваю как безусловную ошибку в программе. То есть такие оборачиваются в исключение типа internal application error и никак специально не укращаются (не переводятся на русский итп); если для кого они и предназначены, то для администратора и разработчика.
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33433759
Фотография msn13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tygra авторГде, по вашему, пролегает граница между серверной и клиентской логикой? Какие функции целесообразно переносить на клиента, какие оставлять на сервере?
Все, что можно, должно обрабатываться на сервере.
Все остальное, но не более 10% :) - на клиенте.

-- Tygra's --
не соглашусь.
нужно помнить что ввиде сервака может выступать простой комп, который просто засыпиться если на него все свалить!
полностью соглашусь с softwarer, что легко пролетит на клиенте , несколько секунд, то и пуска на клиенте вариться...
хотя аспектов дествительно дофига и нужно смотреть в конкретном случае.
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33433800
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
msn13. Зря не соглашаетесь. Окончательную проверку должен делать сервер. А клиент - только первая линия обороны.
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33433803
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msn13нужно помнить что ввиде сервака может выступать простой комп, который просто засыпиться если на него все свалить!
Может тогда вспомним 486 компьютеры в виде клиентов? :))

msn13 полностью соглашусь с softwarer, что легко пролетит на клиенте , несколько секунд, то и пуска на клиенте вариться...
Он говорил про проверки , а не про все вообще

авторхотя аспектов дествительно дофига и нужно смотреть в конкретном случае.
Нет таких аспектов. Dculf один и тот же подход

-- Tygra's --
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33433808
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очепятка:

Всегда один и тот же подход


-- Tygra's --
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33433820
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен с тигрой и ASCRUS.
Весь контроль д.быть на сервере и кое что дублировано на клиенте. Представьте ситуацию, когда контроль находится клиенте и появляется новое приложение, написанное не вами на ту же БД. Или Вы уволились и старого клиента модифицирует кто-то менее грамотный, чем вы.
О дубле контроля в клиенте - исключительно из уважения к юзеру. Можно давать более понятные сообщения - сервер не знает что видит юзер, а клиент знает. Контроль в клиенте позволяет делать более ранние перехваты ошибок юзера.
Что касается запросов, в клиенте стоит оставлять только мелочишку, остальное - на сервер - получается гораздо себе дешевле.
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33434310
Фотография msn13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2msn13. Зря не соглашаетесь. Окончательную проверку должен делать сервер. А клиент - только первая линия обороны.
обана, а где сказано про проверки? я имел ввиду всю логику
>tygra
Он говорил про проверки, а не про все вообще.
ну здесь я имел ввиду идею, что не фиг все валить на сервак

а 486 можно и не вспоминать, у нас например пень2,4 с озу 2Г(раньше был 1Г) и постоянно забит на 70-80 %....
так что и это надо учитывать (пусть это и будет единственный аспект )
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33434920
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, по поводу создания внятных сообщений на клиенте - все можно и на сервере:
так как все операции ч/з ХП, то в них в блоке обработки исключений (Oracle - правда говорят, что теперь и в Юконе исключения появились) вызывается процедура условно названная SendUserError, в которую передается код исключения. Она лезет в таблицу, а далее делает raise_application_error с понятным пользователю сообщением. На клиенте в обработчике ошибок вырезается из него служебная инфа (ORA-<код ошибки>:) и пользователь видит понятное сообщение об ошибке на нужном ему языке.
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33435000
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msn13ну здесь я имел ввиду идею, что не фиг все валить на сервак
А зачем тогда он по вашему нужен, сервак то?

-- Tygra's --
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33435268
Mainframe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2msn13. Зря не соглашаетесь. Окончательную проверку должен делать сервер. А клиент - только первая линия обороны.
А практикуется ли третья линия обороны? она должна быть точно на сервере (на каком-то сервере - веб, СУБД, приложений, etc - это вопрос архитектуры), но выполняется фоново, так как ее проверки связаны с проверкой семантических связей, неявных. Когда связь между данными из разных СУБД, когда одно то же поле может быть идентификатором разных таблиц (возмжно хранящися в разных СУБД). Вот руки никак не доходят сделать такие проверки системными. Они носят у нас скорее отрывочный характер.
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33435597
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2msn13. Зря не соглашаетесь. Окончательную проверку должен делать сервер. А клиент - только первая линия обороны.
Безусловно. И чем это "зря не соглашаетесь"?

Я бы сказал, клиент - первая и основная линия обороны, сервер - в основном резервная. Проверки на сервере защищают в первую очередь от ошибок программиста, от сопровождающих, лезущих в базу мимо сервера итп. Вообще говоря в нормальной ситуации эти проверки срабатывать не должны, исключая те самые отдельные проверки, которые делать на клиенте плохо и не удобно. В принципе может быть поставлен вопрос о последующем отключении проверок на сервере в целях быстродействия.
...
Рейтинг: 0 / 0
Серверная и клиентская логика - где граница?
    #33435613
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShtockКстати, по поводу создания внятных сообщений на клиенте - все можно и на сервере:
Теоретически - можно, практически - плохо. Например, форма ввода данных состоит из нескольких страниц (закладок); если параметры введены с ошибкой, клиентское приложение должно переключиться на соответствующую закладку, поставить курсор на соответствующее поле ввода и написать что-нибудь типа "дата должна быть не раньше 01.01.2000". Если проверка данных идет на сервере, реализовать соответствующую механику становится довольно напряжно.
...
Рейтинг: 0 / 0
25 сообщений из 72, страница 1 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Серверная и клиентская логика - где граница?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]