Форум сайта python.su
Дочитал Defending Pyramid’s Design. Статья описывает, почему в Пирамиде сделали так или иначе определенные вещи.
Особенно доставило http://docs.pylonshq.com/pyramid/dev/designdefense.html#microframeworks-have-smaller-hello-world-programs
Подробно разбираются популярные грабли bottle и flask с разъяснением, почему никогда не стоит использовать такой дизайн.
Наглядно и доходчиво.
Рекомендую. Читать от ссылки и до конца файла.
Определенно, мне эти ребята нравятся все больше и больше.
Офлайн
Андрей Светлов, сейчас им фактически удалось то, чего добивались bfg и grok =) - снизить порог вхождения в фреймворк, который базируется на ZCA, и скрыть эту самую ZCA для непосвященных =). Что здесь может не нравиться?
Офлайн
ZCA - это понятно.
Я о другом.
1. Почему нельзя настраивать конфигурацию при импорте модуля?
2. Почему правила роутинга нужно писать в одном месте, не разбрасывая их по всему коду?
3. Почему глобальные переменные (даже весьма хитрые, с threadlocal) - зло? Этот пункт для совсем деревянных.
4. Отчего wsgi app должно быть именно приложением и не должно пытаться запустить весь wsgi stack с какими-то настройками по умолчанию?
По опыту знаю, первые два пункта особенно неочевидны.
Офлайн
А чем “микро” отличается от простого?
Офлайн
Zubchickмне, на самом деле, сложно объяснить, но, походу, в понимании общественности - чем меньше в фрейморке “batteries included”, тем больше он “микро”. Как-то так …
А чем “микро” отличается от простого?
Офлайн
Есть еще одно забавное определение.
Микрофреймворки позволяют писать микропрограммы.
А микропрограмму можно вместить в один файл-модуль.
Офлайн
Андрей Светловпрочитал. я так понял что они говорят, что создание роутов через декораторы - плохо, т.к. они дублируются.
Подробно разбираются популярные грабли bottle и flask с разъяснением, почему никогда не стоит использовать такой дизайн.
Наглядно и доходчиво.
from app import main
main()
Офлайн
Именно об этом и пишут. Чуть более жизненный пример.
Вот есть у вас два модуля со страничками и роутами к ним.
И есть приложение, которое импортирует оба модуля.
1. Порядок имеет значение - таблица роутов применяется последовательно, до первого совпадения.
2. Эти модули могут циклически импортировать друг друга. Это, конечно, неправильно.
Но в некоторых случаях (нет import .. from ..) питон ошибку не выдаст - а код модуля исполнится несколько раз.
А потом (может, и через месяц-другой) после очередного изменения все ломается.
Я такое видел на наших проектах. И, хоть и ни разу был не Веб - найти ошибку было нелегко.
Тоже обвешивали разными сомнительными декораторами.
Когда проект большой, это случается.
По хорошему за такое бьют по рукам - но мир не идеален.
В результате пришли к чему-то, напоминающему декораторы вьюшек в пирамиде. Декоратор только добавляет атрибуты - а конфигуратор уже потом их анализирует.
Так что и пример некорректный, и ситуация вполне жизненная.
Нечастая, да. Но каждый раз это отлична порция геморроя.
Офлайн
т.е. получается это глюк питона, и сходу ошибку не сымитировать (наткнуться можно только случайно)?
Офлайн
Это не глюк - просто фича.
Оборотная сторона очень мощной особенности - импортируемый код исполняется.
Фича проявляется, когда змеюку начинают бодро хватать за хвост.
До какого-то момента она терпит. А потом начинает кусаться.
Ошибку воссоздать довольно легко - но еще легче забыть о такой особенности.
Как я говорил, за подобный код бьют веником.
Плохой дизайн и т.д.
Программы часто бывают довольно сложными, и получается поймать неожиданности.
Лучше избегать их архитектурно.
При этом bottle и flask отлично работают, если весь код помещается именно в один файл.
Дальше нужно внимательно смотреть.
Офлайн