Здравствуйте, mrozov, Вы писали:
M>Очень круто.
M>Хотелось бы задать только один вопрос — а зачем нужна такая вредная весч? =)
Ну почему же вредная.
M>Поясню — даже в web-приложениях как правило на стороне клиента выполняется хоть какая-то работа. Скриптами.
M>Скрипты эти иногда приходится делать опциональными (не от хорошей жизни), но это не делает их бесполезными.Ибо они существенно сокращают количество ненужных сетевых запросов.
M>При жизни хорошей в распределенном приложении выполняется распределение нагрузки. В пользу клиента
M>Т.е. времена, когда вычисления нужно было перекладывать на плечи серверов были. Но они как бы уже прошли. Сейчас соотношение мощностей среднего сервера и среднего клиента гораздо меньше, чем количество клиентов, которое на этот сервер приходится.
M>Так что применение такого, безусловно очень любопытного, образца высокой программистской мысли, лично мне представляется достаточно ограниченным.Особенно с учетом проработанности механизмов/архитектур для построения приложений полноценных.
M>Я не прав?
Мне думается что не совсем.
Ситуация в мире клиент-серверных приложений не столь однозначна. Достаточно хотя бы
вспомнить о распространенности терминальных решений. О "тонких компьютера" за $200 и прочее.
Тут, как Вы понимаете, разговор о "распределенности" вообще возможен только на стороне сервера.
Если говорить коротко, существует несколько способов создавать клиент-серверные приложения.
1) классическая 2-х звенка ( толстый клиент — база данных)
2) 2-х звенка, прикидывающаяся 3-х звенкой. (терминальный клиент-терминальный сервер-толстый клиент- база данных)
3) 3-х звенка ("тонкий клиент" — сервер — база данных)
в данном случае под "тонким клиентом" понимается как HTML браузер, так и специализированные
приложения, которые работают с графикой.
4) средства построения клиент-сервер на основе технологий объектного брокеринга.
Вот собственно и все. Какое из направлений Вы считаете "архитектурой для построения полноценных
приложений" или "проработанные механизмы" мне непонятно.
Я, размышляя над описанными механизмами, понимал все достоинства и недостатки каждого. Я понимал
почему так популярны "терминальные решения". А популярны они именно по причине простоты создания
серверного программного обеспечения. Программист просто вооружаясь обычной графической библиотекой
и средствами доступа к базе данных, создает приложение. Терминальные средства ( млм средства базы данных) максируют все остальное. Ключевое слово — простота разработки.
Обладают ли этой простотой "проработанные механизмы" основанные на HTTP/HTML/JavaScript/Java/Corba?
Разумеется нет. Для описания простейших интерфейсов Вам приходится работать с кучей файлов и данных, логика размазывается по телу приложения. Возможно кому-то этот подход кажется разумным.
Мне нет. И таких людей давольно много, если принять во внимание обилие средств, делающих,
средствами Java, программирование в этой стилистике более похожее на человеческое. Народ, живущий
в мире Java, делает свою жизнь проще камуфлируя всю известную сложность обрастая тоннами кода и
заметно утяжеляя решение. Мне показалось, что мой подход возможен и имеет место быть и он не
может быть назван только "образцом программистской мысли" посколько имеет рациональные зерна.
В самом деле, разве не приятно работать над серверной частью системы как с совершенно обычным
StandAlone приложением не думая ни о сервантах, скриптах, шаблонах, генерациях страниц,
контрольных точках ( для понимания где находится клиент) а просто писать хорошо знакомый текст.
Вот такой например
TransportPacket Packet;
GGroupBox *groupBox = new GGroupBox(tr("E&xclusive Radio Buttons"), this);
groupBox->setCheckable(true);
groupBox->setChecked(false);
GRadioButton *radio1 = new GRadioButton(tr("Rad&io button 1"), this);
GRadioButton *radio2 = new GRadioButton(tr("Radi&o button 2"), this);
GRadioButton *radio3 = new GRadioButton(tr("Radio &button 3"), this);
radio1->setChecked(true);
GCheckBox *checkBox = new GCheckBox(tr("Ind&ependent checkbox"), this);
checkBox->setChecked(true);
GVBoxLayout *vbox = new GVBoxLayout;
vbox->addWidget(radio1);
vbox->addWidget(radio2);
vbox->addWidget(radio3);
vbox->addWidget(checkBox);
vbox->addStretch(1);
groupBox->setLayout(vbox);
return groupBox;
Это процедура, создающая на стороне клиента группу кнопок. Кто писал на Qt понимает насколько
текст идентичен классическому. На самом деле только одна буква в названии классов изменена.
Ну а уж если Вам нужны всякие тонкости, базы данности и распределенности. Сервер в полном Вашем
распоряжении.
Да, еще о программистской мысли. Аналогичные средства есть в мире Java, только очень медленные.