[room] Вопрос по PHP (или I Hate PHP)
Денис Смирнов
=?iso-8859-1?q?mithraen_=CE=C1_altlinux=2Eru?=
Вт Фев 13 19:16:28 MSK 2007
On Tue, Feb 13, 2007 at 03:21:35PM +0300, Damir Shayhutdinov wrote:
>> - Java категорически не нравится собственно для написания web-приложения.
>> В общем-то это пофиг, потому как я не ленивый, и сделать некий простой
>> скриптовый язык из которого генерировать код на жабе я смогу. А где
>> нужна хоть чуть-чуть нетривиальная логика не выпендриваться, а писать
>> на жабе;
DS> Есть JSP, есть сервлеты. JSP - это аналог php, только вставки там
DS> делаются не на убогом PHP, а на Java, также есть возможность расширять
DS> синтаксис этого jsp своими "тегами" и есть хорошая интеграция с Java
DS> Beans и сессиями.
Ну сервлеты мне хотя бы понятны. JSP это такой же кошмар что и PHP. Идея
мешать код и данные меня категорически не устраивает. Я сейчас пишу вот
так:
=============================================================================
[requires]
[templates]
tpl => firm_edit.tmpl
[cgi_param]
name
form str default(NULL)
firmname str default(NULL)
param
do_update str default(0)
id int min(0)
update
uraddr str default(NULL)
ogrn str default(NULL) min(1)
kpp str default(NULL)
gendir_f str default(NULL)
gendir_i str default(NULL)
gendir_o str default(NULL)
buh_f str default(NULL)
buh_i str default(NULL)
buh_o str default(NULL)
[php]
<?php
if( !$edb->is_counteragent_id($param['id']) )
{
redirect();
exit();
}
if( $param['do_update'] === 'yes' )
{
$where['counteragent_id'] = $param['id'];
$db->update('firms', $update, $where);
$db->update('counteragents', $name, $where);
redirect("firm_show.php?id=".$param['id']);
}
$tpl->param($edb->get_counteragent($param['id']));
$tpl->value('accounts', $edb->get_counteragent_active_accounts($param['id']);
=============================================================================
Разумеется код для объекта edb тоже генерирутся из высокоуровневого
описания. cgi_param генерирует констрейнты для проверки валидности
переданых пользователем значений.
На все приложение, в котором используется такой стиль, есть всего
несколько хоть чуточку нетривиальных функций на PHP. Остальное вот в таком
линейном стиле, который запросто можно автоматически сконвертировать хоть
в basic, хоть в haskell.
>> - Генерировать самому код для JVM -- гм, а что, есть для этого
>> более-менее удобные средства (типа тех что есть в .NET)? Да ещё и
>> более-менее эффективные (умеющие задействовать при необходимости фишки
>> как сановской, так и IBM'овской реализации)?
>> - То, что считается общепринятым методом разработки web-приложений на
>> Java мне не нравится ну совсем. JVM поднимается не шустроб поэтому
>> использовать как CGI нельзя. Остается FastCGI или встраивать в свое
>> приложение http-сервер. Я псих, и могу пойти даже на второе, хотя
>> предпочел бы FastCGI. Как я понимаю писать мне его поддержку придется
>> самостоятельно.
DS> Веб-приложения на Java сделанные в виде сервлетов/JSP отлично
DS> запускаются в среде контейнера сервлетов. То есть для обработки
DS> запроса порождается очередной экземпляр сервлета и вызываются его
DS> методы. Затраты на порождение близки к затратам на вызов метода new +
DS> времени инициализации конструктора.
DS> Контейнер сервлетов Tomcat может подключаться бэкэндом к апачу (через
DS> jk-коннекторы), и у него уже есть штатный load balancing. А может быть
DS> и обычным веб-сервером, даже с поддержкой https.
DS> Есть еще другие контейнеры - но с ними я особенно не работал, так что не знаю.
(со злобным выражением лица и стуча ложкой по столу) хочу FastCGI!
>> Что мне, кстати, очень понравилось в Java -- очень хороший набор
>> параметризуемых классов для различных структур данных. А также сам подход
>> к ООП с разделением интерфейсов и собственно классов. Удобно это.
DS> Главное не увлекаться.
:) Ну, положим увлекаться с _интерфейсами_ в отличии от наследования
вполне безопасно, и не уродует код.
--
С уважением, Денис
http://freesource.info
----------------------------------------------------------------------------
Documentation - The worst part of programming.
Подробная информация о списке рассылки smoke-room