• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

За Что Я Ненавижу Архитектуру «клиент-сервер»

  • Автор темы Дайнеко
  • Дата начала
Д

Дайнеко

• Введение
Данные мысли навеяны следующими обстоятельствами:
1) Я программист с большим стажем. Можно сказать, на моих глазах программирование как профессия прошла путь от удела таинственных бородатых романтиков с распечатками и перфокартами до самостоятельной бизнес-отрасли. И сейчас осваиваю очередной инструмент под название «Платформа 8».
2) Освоение идет не с нуля. Есть многолетний опыт с «семеркой». И этот опыт сильно помогает. Но, чувствуется, иногда и мешает.
3) Я в отпуске. И это самое весомое.

• Вот она — нелюбовь
Про сравнение 7-ки с 8-кой написано многое. Мне же зудит высказаться только об одном аспекте — архитектуре «Клиент-сервер» (далее КС). Я пишу о КС в преломлении 8-ки, но предполагаю, что виновата не она — многие системы построены по такому-же принципу и приемы программирования для них таковы-же.

Мысль 1. Сначала вопрос: для чего она сделана. Ответ звучит так: для работы умного сервера и тупого клиента. Я пытаюсь осмыслить. Если «тупой» - это браузер, то как-то можно понять уровень его интеллекта. А в чем разницы между «толстым» и «тонким» клиентом, точнее сказать их необходимость, понимает только тот, кто их устанавливает. А тот, кто на них работает — ни за что. Идеологи говорят: надо писать по методике КС для решения проблемы «тонкого» канала. Таковы мотивы создания КС.

Мысль 2. Теперь проблема. Почитав материалы, посмотрев примеры КС, я перед всей аудиторией признаюсь: я с ней не справился. Самолюбиво добавлю: я не хочу с ней справляться. Посмотрите, во что превращается программный продукт. Последовательный процесс обработки данных превращается в лоскутное одеяло, перемешанное заголовками «НаКлиенте», «НаСервере». Скажите мне откровенно, у вас не происходит раздвоение личности при просмотре такого текста. Даже глобальные модули 8-ка снабдила этим же признаком, разделив их. Что я и вижу в названиях модулей на примере «Управление небольшой фирмой»: АдресныйКлассификатор (флаги «Сервер», «Вызов Сервера»), «АдресныйКлассификаторКлиент» (флаги «Клиент»), «АдресныйКлассификаторКлиентСервер» (флаги «Клиент», «Сервер»). И в таком стиле почти все. Открываю. В них процедуры: ПередатьФайлыНаСерверПоАдреснымОбъектам(), ПередатьФайлНаСервер(), ЗагрузитьКЛАДРСВебСервера(). Сразу видно чем забита голова программера.
А мне хочется делить по их смысловому назначению. Например: «БлокДляПечати», «БлокДляДуши» и т.д. Процедуры также хочу создавать по душевной необходимости: либо в случае неоднократного применения, либо для читаемости текста.

Мысль 3. Последнее предложение выводит на основную мысль: архитектура КС противоречит основному назначению алгоритмических средств программирования— избавление программиста от знания физического устройства компьютера и сосредоточения на логике обработки данных и их представления.
Для молодого поколения сделаю экскурс в историю. Когда компьютеры были большими, для них вообще существовал только язык машинного кода, или Ассемблера. Писать на нем (пальчиком биты шевелить) считалось крутым занятием, даже после распространения языков высокого уровня (ЯВУ). Появление этих языков: Алгол, Фортран, Кобол, Паскаль, PL/1 вырвало программирование из НИИ космонавтики и военщины на просторы экономического и научного применения. Вольно выражаясь, программист наконец-то мог забыть, сколько бит в байте и просто написать выражение: A=B+C. Результат не заставил себя ждать — сейчас большинство программистов не знает про стек ЦП и для чего он нужен :). Я упомянул эти языки т.к., согласитесь, 1С синтаксисом от указанных ничем не отличается.
Помимо облегчения труда, ЯВУ давали еще одно достоинство — хорошо написанная программа стала читаемой, понимаемой, редактируемой другими специалистами. Это качество породило фразу «программный продукт».
И к чему мы теперь идем? Уже не зная про организацию памяти, ЦП, дискового пространства мы вынуждены принести в жертву. Чему? Проводам, простите, каналам связи. И первое, и второе. И усилия, и красоту программ. Для многих понятие «красота» - архаизм 20-го века, а для меня реальные деньги и железные требования. Вывод: Регресс, товарищи!
Давайте, в качестве примера, возьмем такое задание. Оно возникает у меня на всех справочниках. Человек на форме группы ввел реквизит. Нужно записать его значение во все элементы внутри данной группы. На мое видение, в теле процедуры-реакции я пропишу следующие строки:
- задать вопрос: Будем менять у подчиненных?
- Сделать Запрос для выборки подчиненных
- Цикл по элементам. Внутри него:
- изменить элемент
- записать
- если сбойнуло – выдать сообщение
- Сообщение «Готово».
А теперь я попрошу знающих людей переложить эту задачу в варианте КС. Сколь в ней будет процедур?

• А что делать?
Всласть покритиковав пора и подумать. Я попытаюсь сформулировать, чего бы я хотел.
Задача максимум: программисту вообще не думать. Он пишет код и не занимается изучением в справке каждого метода его область применения. А интерпретатор сам шинкует строки на выполняемые «там» и «тут».
Задача минимум: если КС – зло неизбежное, то хотя бы надо было завернуть его в яркую упаковку. Я бы эту модель больше визуализировал бы. Разделил бы экран по вертикали на две части. Слева сервер, справа клиент. Межу ними ниточки-связи. Кто кого вызывает и что передает. Тогда и не придется напрягать воображение.
Задача компромисс: сама «тонкость» мне не сильно нравится. А не пойти ли в сторону еще большей тонкости в стиле технологии терминального сервера. Сделали бы клиента, который именно в прямом смысле может только картинки воспроизводить. А вся обработка только на сервере. Даже А+Б.

Может еще у кого есть какие соображения или мнения – прошу.
 
V

vitfil

Замечательная статья! Полность согласен. Ну, почти полностью. Не считаю КС таким уж злом. А вот мысль визуального разделения кода сервера и кода клиента и мне приходила в голову.
 
D

Darlock

Согласен, статья отличная. Надеюсь, что не открою америку, если опишу "процесс" прогресса развития платформы. Да, я считаю, что в чем-то 7.7 лучше 8.х, но:
1) В 7.7 понятие КС - заключалось только в хранении данных на стороне СУБД - MSSQL. Компиляция кода только на стороне клиента
2) С появлением платформы 8.0 КС стал более значимым и более четко выделялось его предназначение, но компиляция и выполнение кода изначально на стороне клиента, с возможностью передачи на сторону сервера - инструкции предпрцессора. Радикального изменения в подходе к КС не появилось с выходом 8.1. Табличная модель доступа к данным на уменьшение работала быстрее чем на увеличение (ситуации, когда остатков на запрашиваемую дату нет и платформа сама начинает расчитывать значение исходя из последнего известного остатка прибавляя или отнимая оборот). Также серверная сторона стала "помогать", позволив рутинную работу переложить на нее и по тайм-ауту.
3) Появление платформы 8.2 перевернуло подход к КС. Т.е. весь программный код изначально компилируется и выполняется на сервере, оставив возможность переноса на сторону клиента. Также изменению подвергся механизм рассчета числовых показателей.
В табличной модели доступа к данным ориентир на производительность из менен в сторону "на увеличение" (если не совсем понятно, то п.2, только наоборот). Форма создается на сервере, т.к. сервер "не знает" откуда произошел вызов.

ИМХО - КС не зло, а плюс. Регресс не узрел, разве, что 8.х стала тупить при работе с внешними табличными файлами.

Регрессом считаю, выход последней MS Visual Studio, где от программера, вообще ничего не требуется практически, весь код ему собирает какой-то адский и безмозглый конструктор... Сорри, крик души :mellow:
 
A

Akupaka

Мысли интересные, но вот мне кажется, что гнев направлен не в ту сторону. Я 1С не знаю, поэтому моя мысль такая, поверхностная, - виновата не архитектура, а реализация. Все же.

КС сделана для использования совместных ресурсов сервера многими клиентами одновременно. Т.е. сервер не столько умный, сколько сильный, а клиент не столько тупой, сколько слабый.
А тонкий и толстый клиент - вот эти принципы реализации взаимодействия клиента с сервером призваны решить проблемы плохих каналов, а не сама КС.

А, если Вы такой древний ;) то должны были бы помнить, что КС архитектура это совсем не новое, а давно забытое старое... Хотя, вижу, помните.
Кстати, сейчас к таким технологиям терминальных клиентов уже возвращаются активно в странах, где деньги считают, и на откатах не живут. А мы пока еще покупаем супер-рабочие станции для офисов.

КС абсолютно не заставляет программиста думать о железе, лишь о понимании как (и где) выполняется обработка данных.
А программист, который не знает методов, которые использует - да какой же он программист? Так любую курицу можно было бы сделать программистом. Поэтому Ваша задача максимум не понятна мне.
Сделали бы клиента, который именно в прямом смысле может только картинки воспроизводить
Но клиент же должен еще и данные ввести. А то Вы хотите какой-то неуправляемый видео-плеер! ;)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!