singalen: (Default)
[personal profile] singalen
PHP, MVC и другие троебуквия
Андрей рассказал о своих впечатлениях от PHP-шных фреймворков Zoop и Zephyr.
Сказал, что если по-человечески писать на PHP, а это значит - обязательно используя библиотеку Smarty, то есть отделяя представление от логики, то функции этих ферймворков становятся не нужны.
Цитирую [livejournal.com profile] cousin_it: "А разделение View и Controller в PHP нужно не для элегантности кода. Просто если в ответ на POST-запрос отдавать страницу, то ломается поведение кнопок Back и Refresh во всех браузерах: "Do you wish to resend the information?"

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

В 5-й версии PHP наконец-то поправили грамматику. До того, если функция возвращает объект(хэш), нельзя было написать func()->field. Можно было:
$v = func();
$v->field ...
О Джаве - поправьте меня, если я ошибаюсь.
В J2EE ту же задачу решают: раньше самой популярной библиотекой была Struts, а сейчас - Tapestry. Java Server Faces (JSF) упоминается как "набирающая популярность" библиотека. Почему, она же существует уже достаточно давно? Из-за каких-то изменений в версии 1.2?

Длинные транзакции и разрешение конфликтов
Дима Харченко спросил, как решаются проблемы конкурентности в длинных транзакциях, они же бизнес-транзакции. Пример бизнес-транзакции - это клиент веб-магазина положил товар в корзинку, и пошёл собирать корзинку дальше. В это время другой покупатель положил в свою корзинку ту же самую (единственную на складе) единицу товара. Или менеджер вообще снёс товар со склада и из ассортимента.
Имеем типичный write-write конфликт.
У них в проекте вообще нарушалось правило Киркгофа: из точки выходило меньше товара, чем его завозили %)
(Кстати, shoppping cart в e-магазинах должен храниться около двух недель)

Я пересказал фаулеровский подход из "Корпоративных систем", когда все длинные транзакии реализуются в сервере приложений бизнес-объектами. Какое-то количество общей "транзакционной" логики реализовать придётся, но небольшое и достаточно специфическое. Почти наверняка уровни изоляции писать НЕ придётся %)
При этом состояние бизнес-объектов сервера приложения можно хранить и не в нём самом, а опять в БД - все корзинки, остатки товаров и т.п.
Ещё Димина команда рассматривала вариант - ввести тернарную (троичную) логику наличия товара. Не "есть"-"нет", а
"есть"-"нет"-"может быть". Правда, это тоже нужно писать руками, причём много. Так, вместо простого оператора сравнения количества товара на складе с количеством заказанного покупателем (<=) придётся делать обработку троичного значения.
Тут же всплыли версии значений булевской переменной: "Нет, не сейчас", "Нет, и никогда не говори мне об этом" и "У меня болит голова".
Туда же - Вова Мутель упомянул индийскую школу логики с 5ю значениями: "Да", "Нет", "Ни да ни нет", "И да и нет" и "Ни один из перечисленных вариантов".
3-значная логика есть в Boost. Приколитесь:
tribool b = some_operation();
if (b) {
  // b is true
}
else if (!b) {
  // b is false
}
else {
  // b is indeterminate
}

Оффтопики
Вспоминали, что такое парсек. Не вспомнили %) Вова вспимнил.
О XP Вова сказал, что "нет сильнее той фаланги, в которой воины любят друг друга" (Ксенофонт).
Надолго занесло в разговор о Форексе.
Придумали, вслед за фотопринтером и принтером на CD, принтер для пиццы и профессию "верстальщик пиццы". Страшная картинка тут.

(no subject)

30/5/06 11:16 (UTC)
Posted by [identity profile] dph.livejournal.com
Основная проблема Tapestry - про нее очень мало информации в инете.
И, как и для всех подобных платформ, очень дорого делать что-то не предполагавшееся. Например, генерить с помощью Tapestry XML довольно сложно.
Мы где-то пару месяцев с ней игрались, потом решили все на AJAX делать.

Про AJAX. В общем, да, на клиент передается модель. ТОлько лучше не XML, а Json - его проще разбирать и на сервере и на клиенте.
Кода - довольно много, несколько сот килобайт, грузится один раз.
Зато код довольно ясный и на сервере и на клиенте - и гораздо проще в сопровождении, нежели созданный с шаблонами (там очень сложно отделить Model от View и Controller).
Ну и Ajax снимает некоторые проблемы вроде кнопки Back ;)