Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Философия mod_perl и mod_python
Мне всегда представлялась странной философия mod_perl, где функция-хендлер (обработчик запроса) вызывается как метод класса. По своему устройству и способу вызова она является конструктором, но от этого «конструктора» не требуется ничего конструировать(!), он должен обработать запрос (параметры запроса передаются в объекте-аргументе) сгенерировать ответ и вернуть статус (фактически число, а не объект). На мой взгляд, такое устройство не логично и идёт в разрез с ОО-моделью программирования. Конечно, при желании можно извлечь некоторую пользу из возможности наследовать обработчик из единого базового класса, но это не устраняет противоречие, а лишь запутывает код, который имея ОО-вид должен выполнять процедурные задачи, причём теперь где-то в глубине, в базовом классе.
Такой подход был бы оправдан, если бы хендлер возвращал бы не статус, а объект с заданным интерфейсом. Скажем, тело ответа доступно как $replay->body, статус как $replay->status и так далее.
Другой вариант: метод-хендлер вызывается, как инициализатор объекта запроса. То есть класс хендлера наследуется от класса запроса и переопределяет некоторые виртуальные методы. Это было бы очень удобное и красивое использование преимуществ ОО-подхода. Кроме того, хендлеру не пришлось бы явно передавать аргументы, объект запроса был бы просто доступен как self.
Что ж, возможно разработчики mod_perl планировали реализовать что-то подобное, но почему-то этого не сделали.
В mod_python обработчик (хендлер) – это просто функция (внутри которой, конечно, можно сконструировать объект и работать с этим объектом). Она тоже принимает объект запроса (по своему устройству, брата-близнеца объекта из mod_perl), тоже генерирует ответ и тоже возвращает статус. Мне это представляется более логичным. Но другого решения в mod_python и не могло быть, в Python конструктор может вернуть только объект. Никаких undef или статусов конструктор вернуть не может (что логично). Ошибки же отслеживаются механизмом исключений. Это Python-way.
1. Официальный сайт проекта mod_python –
2. Официальный сайт проекта mod_perl –
3. Официальный сайт Python –