Мода на веб-фреймворки - тезисы — различия между версиями
Материал из YourcmcWiki
м |
StasFomin (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
Название доклада: | Название доклада: | ||
− | * «Мода на коробки и фреймворки в | + | * «Мода на коробки и фреймворки в вебе — доколе?» |
Тезисы: | Тезисы: | ||
− | * Как часто для разработки веб-проекта (не самого простого!) выбирается коробочная CMS, а потом, пока программисты яростно пытаются совладать с её недостатками, а за хостинг | + | * Как часто для разработки веб-проекта (не самого простого!) выбирается коробочная CMS, а потом, пока программисты яростно пытаются совладать с её недостатками, а за хостинг каждый месяц отстегиваются миллионы, менеджеры, несмотря ни на что, продолжают защищать свой выбор, аргументируя это тем, что «инструмент отличный» и его всего-то надо «немного подкрутить, и цель точно будет достигнута»? |
− | * А как часто выбирается фреймворк (что, конечно, лучше CMS) | + | * А как часто выбирается жирный фреймворк (что, конечно, лучше CMS), который сразу начинает неудержимо обрастать костылями, потому что цели, под которые он разрабатывался, не совсем соответствуют целям проекта? |
− | * Что общего в этих подходах? Во-первых, оба подхода рождаются из одного | + | * Что общего в этих подходах? Во-первых, оба подхода рождаются из одного желания — желания создать (а зачастую и продавать!) продукт, который Вроде-Бы может решить… абсолютно ВСЕ задачи. А во-вторых, и то, и другое настолько «вошло в моду», что люди почти не задумываются о куче проблем, которые получат с выбором таких инструментов. |
* Соображения именно об этой моде и о типичных проблемах, получаемых людьми вместе с ней, и хотелось бы донести в рамках доклада. | * Соображения именно об этой моде и о типичных проблемах, получаемых людьми вместе с ней, и хотелось бы донести в рамках доклада. | ||
Строка 12: | Строка 12: | ||
* Движок, на котором «можно сделать всё», причём в идеале «без единого гвоздя» :) | * Движок, на котором «можно сделать всё», причём в идеале «без единого гвоздя» :) | ||
* Смысл именно в спозиционированной общности применения. | * Смысл именно в спозиционированной общности применения. | ||
− | * Скажем, | + | * Скажем, MediaWiki — не CMS, хотя сайт на ней сделать тоже можно. WordPress — когда-то тоже не был CMS, а сейчас уподобился битриксу. |
Минусы CMS: | Минусы CMS: | ||
− | * | + | * Монстр — Сложная и Неэффективная |
** => Плохо подходит для посещаемых сайтов | ** => Плохо подходит для посещаемых сайтов | ||
**: И посещаемый сайт сделать на CMS можно, но геморроя не оберёшься. Будут тормоза, будет дорогой хостинг, будут простои, будут падения при внесении доработок и даже, например, сбросе кэша. | **: И посещаемый сайт сделать на CMS можно, но геморроя не оберёшься. Будут тормоза, будет дорогой хостинг, будут простои, будут падения при внесении доработок и даже, например, сбросе кэша. | ||
− | ** Сложность программной системы | + | ** Сложность программной системы растет нелинейно при увеличении размера => отсюда все эти SOA и т. п. |
− | * | + | * И вы оплачиваете её неэффективность! |
− | ** Деньгами хостингу серверов | + | ** Деньгами хостингу серверов. |
− | ** Деньгами продавцу коробки | + | ** Деньгами продавцу коробки. |
− | ** Деньгами подрядчикам, её дорабатывающим | + | ** Деньгами подрядчикам, её дорабатывающим. |
− | **: | + | **: Дешёвым — обычно несколько раз |
* Некрасивая архитектура, оптимизированная под «общий случай». То есть, не оптимизированная ни подо что вообще. | * Некрасивая архитектура, оптимизированная под «общий случай». То есть, не оптимизированная ни подо что вообще. | ||
− | ** Простейший | + | ** Простейший пример — EAV<ref>Она же OAV (object–attribute–value), фреймворки неэффективно обеспечивающие работу с произвольными атрибутными сущностями.</ref>. |
* Расчёт на доработку дешёвыми подрядчиками (и, похоже, дешёвыми программистами самой CMS) | * Расчёт на доработку дешёвыми подрядчиками (и, похоже, дешёвыми программистами самой CMS) | ||
− | ** Как они там в битриксе параметры научиться экранировать не могут | + | ** Как они там в битриксе параметры научиться экранировать не могут. |
− | ** Нормальный разработчик в ЭТО потом вообще не полезет | + | ** Нормальный, уважающий себя, разработчик в ЭТО потом вообще не полезет. |
* Вы оплачиваете и её сложность! | * Вы оплачиваете и её сложность! | ||
** | ** | ||
* Примеры: | * Примеры: | ||
** Битрикс (должен быть стоп-словом) | ** Битрикс (должен быть стоп-словом) | ||
− | *** «БИТРИКС | + | *** «БИТРИКС ДЕТЕКТЕД» — вполне катит для отдельного раздела на говнокод.ру. |
− | *** Битрикс можно снести с серверов, но нельзя убрать из головы | + | *** Битрикс можно снести с серверов, но нельзя убрать из головы. |
− | ***: («Можно вывезти девушку из деревни, но нельзя вывести деревню из девушки») | + | ***: («Можно вывезти девушку из деревни, но нельзя вывести деревню из девушки»). |
− | ** | + | ** WordPress — внутри тот же битрикс, только открытый и менее коробочный. |
− | ** Любые движки интернет-магазинов с EAV | + | ** Любые движки интернет-магазинов с EAV. |
Что такое фреймворк? | Что такое фреймворк? | ||
Строка 46: | Строка 46: | ||
* Почти все нужные абстракции в PHP уже есть => фреймворк даёт мало полезного функционала | * Почти все нужные абстракции в PHP уже есть => фреймворк даёт мало полезного функционала | ||
*: Зачастую «умного» функционала, который мог бы быть очень полезен, как раз и нет, а есть только совсем шаблонные решения. Обёрнутые в классы, фабрики и фабрики фабрик. | *: Зачастую «умного» функционала, который мог бы быть очень полезен, как раз и нет, а есть только совсем шаблонные решения. Обёрнутые в классы, фабрики и фабрики фабрик. | ||
− | * Жирная зависимость => для библиотек не подходит. Библиотека под | + | :* Паттерн «Фабрика проблем». |
+ | * Жирная зависимость => для библиотек не подходит. Библиотека под фреймворк — уже не библиотека, а плагин. | ||
* Простые проекты усложняет => для простого не подходит. | * Простые проекты усложняет => для простого не подходит. | ||
* В сложных проектах жмёт => для сложного тоже не подходит. | * В сложных проектах жмёт => для сложного тоже не подходит. | ||
− | * Остаются «средние» проекты… (а это вообще что?) | + | * Остаются «средние» проекты… (а это вообще что? обреченные проекты без развития?). |
− | * Вам могут тупо не понравиться практики, принятые во фреймворке, а от них никуда не деться | + | * Вам могут тупо не понравиться практики, принятые во фреймворке, а от них никуда не деться. |
− | *: Одни фреймворки более пермиссивные, чем другие, и в них этот минус частично сглаживается | + | *: Одни фреймворки более пермиссивные, чем другие, и в них этот минус частично сглаживается. |
− | * Дополнительный источник багов и дыр | + | * Дополнительный источник багов и дыр. |
* Глобальные перетрахивания фреймворка, происходящие при обновлении языка (например php4 -> php5, неймспейсы) => возможно, придётся перетрахивать и ваш код | * Глобальные перетрахивания фреймворка, происходящие при обновлении языка (например php4 -> php5, неймспейсы) => возможно, придётся перетрахивать и ваш код | ||
− | * Очень обидно, если для переопределения чего-то нельзя обойтись без патчинга | + | * Очень обидно, если для переопределения чего-то нельзя обойтись без патчинга фреймворка — а такое бывает! |
− | * «Автобусный фактор» разработки некоторых фреймворков | + | * «Автобусный фактор» разработки некоторых фреймворков. |
− | * Внутрикорпоративные | + | * Внутрикорпоративные фреймворки — вообще отдельная песня. С ними решение — либо выводить в опенсорс, либо не особо сильно на них полагаться. Либо и то, и другое. |
− | * Единственный | + | * Единственный плюс — для слабых разработчиков фреймворк может послужить: |
+ | ** а) ограничителем применения бурной неокрепшей фантазии (но его нужно «правильно готовить»); | ||
+ | ** б) подспорьем в обучении программированию при осмотре деталей реализации самого фреймворка. | ||
Вывод: | Вывод: | ||
− | * Всё как обычно с любой модой/ | + | * Всё как обычно с любой модой/предубеждением — «думай, прежде чем выбирать». |
− | * Полезное применение фреймворков шире, чем у CMS, но всё же относительно узкое | + | * Полезное применение фреймворков шире, чем у CMS, но всё же относительно узкое. |
− | * Если фреймворк | + | * Если фреймворк пермиссивный — возможно, он хотя бы не навредит. |
− | * Главный плюс рукотворный: PHP- | + | * Главный плюс рукотворный: PHP-фреймворки — это мода, упрощающая продажу менеджерам, которые слышали buzzword, но не разбирались в вопросе. |
Версия 08:44, 3 сентября 2012
Название доклада:
- «Мода на коробки и фреймворки в вебе — доколе?»
Тезисы:
- Как часто для разработки веб-проекта (не самого простого!) выбирается коробочная CMS, а потом, пока программисты яростно пытаются совладать с её недостатками, а за хостинг каждый месяц отстегиваются миллионы, менеджеры, несмотря ни на что, продолжают защищать свой выбор, аргументируя это тем, что «инструмент отличный» и его всего-то надо «немного подкрутить, и цель точно будет достигнута»?
- А как часто выбирается жирный фреймворк (что, конечно, лучше CMS), который сразу начинает неудержимо обрастать костылями, потому что цели, под которые он разрабатывался, не совсем соответствуют целям проекта?
- Что общего в этих подходах? Во-первых, оба подхода рождаются из одного желания — желания создать (а зачастую и продавать!) продукт, который Вроде-Бы может решить… абсолютно ВСЕ задачи. А во-вторых, и то, и другое настолько «вошло в моду», что люди почти не задумываются о куче проблем, которые получат с выбором таких инструментов.
- Соображения именно об этой моде и о типичных проблемах, получаемых людьми вместе с ней, и хотелось бы донести в рамках доклада.
Что такое CMS?
- Движок, на котором «можно сделать всё», причём в идеале «без единого гвоздя» :)
- Смысл именно в спозиционированной общности применения.
- Скажем, MediaWiki — не CMS, хотя сайт на ней сделать тоже можно. WordPress — когда-то тоже не был CMS, а сейчас уподобился битриксу.
Минусы CMS:
- Монстр — Сложная и Неэффективная
- => Плохо подходит для посещаемых сайтов
- И посещаемый сайт сделать на CMS можно, но геморроя не оберёшься. Будут тормоза, будет дорогой хостинг, будут простои, будут падения при внесении доработок и даже, например, сбросе кэша.
- Сложность программной системы растет нелинейно при увеличении размера => отсюда все эти SOA и т. п.
- => Плохо подходит для посещаемых сайтов
- И вы оплачиваете её неэффективность!
- Деньгами хостингу серверов.
- Деньгами продавцу коробки.
- Деньгами подрядчикам, её дорабатывающим.
- Дешёвым — обычно несколько раз
- Некрасивая архитектура, оптимизированная под «общий случай». То есть, не оптимизированная ни подо что вообще.
- Простейший пример — EAV[1].
- Расчёт на доработку дешёвыми подрядчиками (и, похоже, дешёвыми программистами самой CMS)
- Как они там в битриксе параметры научиться экранировать не могут.
- Нормальный, уважающий себя, разработчик в ЭТО потом вообще не полезет.
- Вы оплачиваете и её сложность!
- Примеры:
- Битрикс (должен быть стоп-словом)
- «БИТРИКС ДЕТЕКТЕД» — вполне катит для отдельного раздела на говнокод.ру.
- Битрикс можно снести с серверов, но нельзя убрать из головы.
- («Можно вывезти девушку из деревни, но нельзя вывести деревню из девушки»).
- WordPress — внутри тот же битрикс, только открытый и менее коробочный.
- Любые движки интернет-магазинов с EAV.
- Битрикс (должен быть стоп-словом)
Что такое фреймворк?
- Как и библиотека, набор заранее написанного функционала…
- Но фреймворк отличается от библиотеки повсеместным применением IoC.
Минусы веб-фреймворков:
- Почти все нужные абстракции в PHP уже есть => фреймворк даёт мало полезного функционала
- Зачастую «умного» функционала, который мог бы быть очень полезен, как раз и нет, а есть только совсем шаблонные решения. Обёрнутые в классы, фабрики и фабрики фабрик.
- Паттерн «Фабрика проблем».
- Жирная зависимость => для библиотек не подходит. Библиотека под фреймворк — уже не библиотека, а плагин.
- Простые проекты усложняет => для простого не подходит.
- В сложных проектах жмёт => для сложного тоже не подходит.
- Остаются «средние» проекты… (а это вообще что? обреченные проекты без развития?).
- Вам могут тупо не понравиться практики, принятые во фреймворке, а от них никуда не деться.
- Одни фреймворки более пермиссивные, чем другие, и в них этот минус частично сглаживается.
- Дополнительный источник багов и дыр.
- Глобальные перетрахивания фреймворка, происходящие при обновлении языка (например php4 -> php5, неймспейсы) => возможно, придётся перетрахивать и ваш код
- Очень обидно, если для переопределения чего-то нельзя обойтись без патчинга фреймворка — а такое бывает!
- «Автобусный фактор» разработки некоторых фреймворков.
- Внутрикорпоративные фреймворки — вообще отдельная песня. С ними решение — либо выводить в опенсорс, либо не особо сильно на них полагаться. Либо и то, и другое.
- Единственный плюс — для слабых разработчиков фреймворк может послужить:
- а) ограничителем применения бурной неокрепшей фантазии (но его нужно «правильно готовить»);
- б) подспорьем в обучении программированию при осмотре деталей реализации самого фреймворка.
Вывод:
- Всё как обычно с любой модой/предубеждением — «думай, прежде чем выбирать».
- Полезное применение фреймворков шире, чем у CMS, но всё же относительно узкое.
- Если фреймворк пермиссивный — возможно, он хотя бы не навредит.
- Главный плюс рукотворный: PHP-фреймворки — это мода, упрощающая продажу менеджерам, которые слышали buzzword, но не разбирались в вопросе.