Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 17, 2010 16:05:57

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Микрофреймворки

Дочитал Defending Pyramid’s Design. Статья описывает, почему в Пирамиде сделали так или иначе определенные вещи.

Особенно доставило http://docs.pylonshq.com/pyramid/dev/designdefense.html#microframeworks-have-smaller-hello-world-programs
Подробно разбираются популярные грабли bottle и flask с разъяснением, почему никогда не стоит использовать такой дизайн.
Наглядно и доходчиво.

Рекомендую. Читать от ссылки и до конца файла.
Определенно, мне эти ребята нравятся все больше и больше.



Офлайн

#2 Ноя. 17, 2010 16:11:56

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Микрофреймворки

Андрей Светлов, сейчас им фактически удалось то, чего добивались bfg и grok =) - снизить порог вхождения в фреймворк, который базируется на ZCA, и скрыть эту самую ZCA для непосвященных =). Что здесь может не нравиться?



Офлайн

#3 Ноя. 17, 2010 16:24:07

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Микрофреймворки

ZCA - это понятно.
Я о другом.

1. Почему нельзя настраивать конфигурацию при импорте модуля?
2. Почему правила роутинга нужно писать в одном месте, не разбрасывая их по всему коду?
3. Почему глобальные переменные (даже весьма хитрые, с threadlocal) - зло? Этот пункт для совсем деревянных.
4. Отчего wsgi app должно быть именно приложением и не должно пытаться запустить весь wsgi stack с какими-то настройками по умолчанию?

По опыту знаю, первые два пункта особенно неочевидны.



Офлайн

#4 Ноя. 17, 2010 16:46:14

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Микрофреймворки

А чем “микро” отличается от простого?



Офлайн

#5 Ноя. 17, 2010 16:52:10

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Микрофреймворки

Zubchick
А чем “микро” отличается от простого?
мне, на самом деле, сложно объяснить, но, походу, в понимании общественности - чем меньше в фрейморке “batteries included”, тем больше он “микро”. Как-то так …



Офлайн

#6 Ноя. 17, 2010 17:07:48

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Микрофреймворки

Есть еще одно забавное определение.
Микрофреймворки позволяют писать микропрограммы.
А микропрограмму можно вместить в один файл-модуль.



Офлайн

#7 Ноя. 17, 2010 17:50:35

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Микрофреймворки

Андрей Светлов
Подробно разбираются популярные грабли bottle и flask с разъяснением, почему никогда не стоит использовать такой дизайн.
Наглядно и доходчиво.
прочитал. я так понял что они говорят, что создание роутов через декораторы - плохо, т.к. они дублируются.
они не дублируются если запускать приложение правильно - нельзя импортировать запускаемый файл, т.е. если создать файл start.py:
from app import main
main()
то их “некорректный” пример работает корректно.

Офлайн

#8 Ноя. 17, 2010 19:55:53

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Микрофреймворки

Именно об этом и пишут. Чуть более жизненный пример.
Вот есть у вас два модуля со страничками и роутами к ним.
И есть приложение, которое импортирует оба модуля.

1. Порядок имеет значение - таблица роутов применяется последовательно, до первого совпадения.
2. Эти модули могут циклически импортировать друг друга. Это, конечно, неправильно.
Но в некоторых случаях (нет import .. from ..) питон ошибку не выдаст - а код модуля исполнится несколько раз.
А потом (может, и через месяц-другой) после очередного изменения все ломается.
Я такое видел на наших проектах. И, хоть и ни разу был не Веб - найти ошибку было нелегко.
Тоже обвешивали разными сомнительными декораторами.
Когда проект большой, это случается.
По хорошему за такое бьют по рукам - но мир не идеален.
В результате пришли к чему-то, напоминающему декораторы вьюшек в пирамиде. Декоратор только добавляет атрибуты - а конфигуратор уже потом их анализирует.

Так что и пример некорректный, и ситуация вполне жизненная.
Нечастая, да. Но каждый раз это отлична порция геморроя.



Офлайн

#9 Ноя. 17, 2010 21:47:06

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Микрофреймворки

т.е. получается это глюк питона, и сходу ошибку не сымитировать (наткнуться можно только случайно)?

Офлайн

#10 Ноя. 17, 2010 22:38:37

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Микрофреймворки

Это не глюк - просто фича.
Оборотная сторона очень мощной особенности - импортируемый код исполняется.
Фича проявляется, когда змеюку начинают бодро хватать за хвост.
До какого-то момента она терпит. А потом начинает кусаться.

Ошибку воссоздать довольно легко - но еще легче забыть о такой особенности.
Как я говорил, за подобный код бьют веником.
Плохой дизайн и т.д.
Программы часто бывают довольно сложными, и получается поймать неожиданности.
Лучше избегать их архитектурно.

При этом bottle и flask отлично работают, если весь код помещается именно в один файл.
Дальше нужно внимательно смотреть.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version