(no subject)
27/4/06 12:12PHP, MVC и другие троебуквия
Андрей рассказал о своих впечатлениях от PHP-шных фреймворков Zoop и Zephyr.
Сказал, что если по-человечески писать на PHP, а это значит - обязательно используя библиотеку Smarty, то есть отделяя представление от логики, то функции этих ферймворков становятся не нужны.
Цитирую
cousin_it: "А
разделение View и Controller в PHP нужно не для элегантности кода.
Просто если в ответ на POST-запрос отдавать страницу, то ломается
поведение кнопок Back и Refresh во всех браузерах: "Do you wish to
resend the information?"
Вчера по сети пробегала картинка, изображающая взлом локальной машины. См. ссылку в конце поста.
В 5-й версии PHP наконец-то поправили грамматику. До того, если функция возвращает объект(хэш), нельзя было написать func()->field. Можно было:
В J2EE ту же задачу решают: раньше самой популярной библиотекой была Struts, а сейчас - Tapestry. Java Server Faces (JSF) упоминается как "набирающая популярность" библиотека. Почему, она же существует уже достаточно давно? Из-за каких-то изменений в версии 1.2?
Длинные транзакции и разрешение конфликтов
Дима Харченко спросил, как решаются проблемы конкурентности в длинных транзакциях, они же бизнес-транзакции. Пример бизнес-транзакции - это клиент веб-магазина положил товар в корзинку, и пошёл собирать корзинку дальше. В это время другой покупатель положил в свою корзинку ту же самую (единственную на складе) единицу товара. Или менеджер вообще снёс товар со склада и из ассортимента.
Имеем типичный write-write конфликт.
У них в проекте вообще нарушалось правило Киркгофа: из точки выходило меньше товара, чем его завозили %)
(Кстати, shoppping cart в e-магазинах должен храниться около двух недель)
Я пересказал фаулеровский подход из "Корпоративных систем", когда все длинные транзакии реализуются в сервере приложений бизнес-объектами. Какое-то количество общей "транзакционной" логики реализовать придётся, но небольшое и достаточно специфическое. Почти наверняка уровни изоляции писать НЕ придётся %)
При этом состояние бизнес-объектов сервера приложения можно хранить и не в нём самом, а опять в БД - все корзинки, остатки товаров и т.п.
Ещё Димина команда рассматривала вариант - ввести тернарную (троичную) логику наличия товара. Не "есть"-"нет", а "есть"-"нет"-"может быть". Правда, это тоже нужно писать руками, причём много. Так, вместо простого оператора сравнения количества товара на складе с количеством заказанного покупателем (<=) придётся делать обработку троичного значения.
Тут же всплыли версии значений булевской переменной: "Нет, не сейчас", "Нет, и никогда не говори мне об этом" и "У меня болит голова".
Туда же - Вова Мутель упомянул индийскую школу логики с 5ю значениями: "Да", "Нет", "Ни да ни нет", "И да и нет" и "Ни один из перечисленных вариантов".
3-значная логика есть в Boost. Приколитесь:
Оффтопики
Вспоминали, что такое парсек.Не вспомнили %) Вова вспимнил.
О XP Вова сказал, что "нет сильнее той фаланги, в которой воины любят друг друга" (Ксенофонт).
Надолго занесло в разговор о Форексе.
Придумали, вслед за фотопринтером и принтером на CD, принтер для пиццы и профессию "верстальщик пиццы". Страшная картинка тут.
Андрей рассказал о своих впечатлениях от PHP-шных фреймворков Zoop и Zephyr.
Сказал, что если по-человечески писать на PHP, а это значит - обязательно используя библиотеку Smarty, то есть отделяя представление от логики, то функции этих ферймворков становятся не нужны.
Цитирую
Вчера по сети пробегала картинка, изображающая взлом локальной машины. См. ссылку в конце поста.
В 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, принтер для пиццы и профессию "верстальщик пиццы". Страшная картинка тут.
Tags:
про пхп задело )
27/4/06 03:21 (UTC)не смотрел именно эти фреймворки, но обычно их ф-ии - немного больше, чем просто template engine )
(no subject)
27/4/06 04:03 (UTC)(no subject)
27/4/06 04:34 (UTC)много - потому что Zend слишком долго морозится и не может передрать рельсу )
+ Not Invented Here, конечно =)
(no subject)
27/4/06 04:44 (UTC)А в чём они не могут передрать рельсу (я всё ещё не знаю ни того ни другого 8((() ?
(no subject)
27/4/06 05:19 (UTC)Zend - официальная контора, которая продвигает php.
чтобы покончить с творящимся бардаком (у каждого свой фреймворк), они начали делать движок, который должен стать стандартом.
но как-то странно начали. начали с непонятного набора функций(!), класса для чтения rss и прочей фигни (
Я из лесу вышел...
27/4/06 04:22 (UTC)(no subject)
27/4/06 04:51 (UTC)Кстати, там нет ни Zephyr, ни Zoop.
Очень непонятный список
27/4/06 14:16 (UTC)Поэтому тем более мне не ясно - почему там нет ни ZOOP ни Zephyr ни Xoops, о котором говорил Владимир Мутель.
Последний стал номинантом Community Choice Awards 2006 на SourceForge.Net.... такое звание просто так не получает никто.
Поклацал я фреймворки в том списке.... на PHP без надписи в названии не натолкнулся,... но вот такие строки в одном из них - " **** is compatible with both PHP4 and PHP5" - сразу наводя на мысль, что MVC там и близко не лежало... без наследования этого красиво не сделаешь, я так думаю.
Re: Очень непонятный список
27/4/06 14:33 (UTC)http://www.phpwact.org/php/mvc_frameworks
Отличный линк
3/5/06 02:00 (UTC)Re: Очень непонятный список
30/4/06 09:28 (UTC)(no subject)
27/4/06 06:14 (UTC)http://www.netoscope.ru/news/2001/04/09/1995.html
(no subject)
27/4/06 14:19 (UTC)а вот тут как раз Владимир точно вспомнил определение ;)
(no subject)
30/4/06 09:19 (UTC)(no subject)
3/5/06 01:30 (UTC)(no subject)
30/5/06 10:45 (UTC)К сожалению, Tapestry еще очень далеко до популярности - большая часть программистов как использовала Struts, так и использует ;( Да и у Tapestry куча проблем.
Я вообще подозреваю, что дальше будет сразу прыжкок на AJAX сайты, а все эти жуткие библиотеки шаблонов вымрут.
(no subject)
30/5/06 11:11 (UTC)Жуткие, а что делать. Есть задача - сгенерировать HTML по шаблони и объекту-модели.
При работе с AJAX, я так понимаю, объект-модель передаётся как XML на клиента, и там уже джаваскрипт "вносит" его в страничку? А это не слишком ли сложно, не требует ли слишком много кода на клиенте?
(no subject)
30/5/06 11:16 (UTC)И, как и для всех подобных платформ, очень дорого делать что-то не предполагавшееся. Например, генерить с помощью Tapestry XML довольно сложно.
Мы где-то пару месяцев с ней игрались, потом решили все на AJAX делать.
Про AJAX. В общем, да, на клиент передается модель. ТОлько лучше не XML, а Json - его проще разбирать и на сервере и на клиенте.
Кода - довольно много, несколько сот килобайт, грузится один раз.
Зато код довольно ясный и на сервере и на клиенте - и гораздо проще в сопровождении, нежели созданный с шаблонами (там очень сложно отделить Model от View и Controller).
Ну и Ajax снимает некоторые проблемы вроде кнопки Back ;)