Мода на коробки и
фреймворки в вебе — ДОКОЛЕ?!

(ликбез для менеджеров)

Monster-shadow-cms.svg

Виталий Филиппов, CUSTIS

Допустим, вам нужно создать интернет-проект

Что вы выберете?

Site-options.svg

Проблема моды

Koza.svg
  • «Писать самим? Да вы что? Всё уже написано до вас!»
  • Есть же коробочные CMS! Поставил, и сайт готов! Супер-поддержка от компании-изготовителя!
  • А также куча модных фреймворков! Zend, CI, Yii! Паттерны, все и разом!

А потом…

CryingFace.svg
  • «Хостинг стоит миллионы!»
  • «Сайт тормозит!»
  • «Медленно внедряются доработки!»
  • «Постоянно что-то отваливается!»
  • «Всё обросло костылями!»

… и при этом:

«Нет, надо ещё чуть-чуть докрутить, и цель будет достигнута!»

Надо было думать, когда выбирали!

…а не слепо следовать моде.


Ибо (!)

Ибо у каждого инструмента есть своя область применения

Что такое CMS?

CMS2.png


* Just for Lulz: http://lurkmore.to/CMS

Что такое CMS?

Sarcasm.jpg
  • Content Management System
  • Движок (ПО) сайта
  • ;-) …На котором можно сделать ЛЮБОЙ сайт
  • ;-) …Причём без единого гвоздя (строчки кода)


;-)

Стандартная фраза:

«…это программный комплекс, позволяющий создавать веб-сайты любого уровня сложности…»

Koza.svg

Смысл именно в общности применения

MediaWiki-notext.svg

Например,

  • MediaWiki, MoinMoin и т. п. — не CMS, а вики-движки (хотя сайт на них сделать можно)
  • PhpBB, IPB — движки форумов

В то же время,

  • WordPress — был движком для блогов, а стал CMS
  • osCommerce, Magento — спец. CMS, движки интернет-магазинов
  • Joomla, Drupal, MODx, NetCat, Битрикс, UMI.CMS — это всё CMS

Теоретически…

...Можно любой движок сайта называть CMS,
и лишь различать степень специализации.

Но обычно говорят именно о CMS общего назначения.

Такие CMS — монстры

MutantMonster.png
  • Сложные и Неэффективные
  • С кривой архитектурой
    Оптимизированной для всего ни для чего
  • С кучей лишнего функционала

А оплачивать всё это вам (если вдруг выберете)

Оплачивать вам это…

  • Деньгами продавцу коробки
  • Деньгами хостеру1
  • Деньгами подрядчикам при доработках2
  • Репутацией в глазах клиентов

1 «Кому спам, а кому и трафик!»
2 Дешёвым — обычно несколько раз

А всё дело в том, что…

Универсальные инструменты невменяемы!

Wenger giant knife.png


* Wenger Giant Knife

Когда реально применять CMS?

— Где можно оправданно использовать Битрикс?
— В анекдотах.


* Твит с CodeFest-2012, >200 ретвитов

Когда реально применять CMS? (а серьёзно?)

Проект простой? ⇒
CMS не нужна, ибо это из пушки по воробьям
Проект сложный? ⇒
возможностей CMS наверняка не хватит,
а плохая архитектура усложнит их реализацию
Проект посещаемый? ⇒
упрётесь в низкую производительность

Что же остаётся?

Серая массовка*

  • Шаблонные,
  • не особо посещаемые,
  • быдлопроектики.

* Какие-нибудь «порталы» с копи-пи**ерами новостей…

WARNING!

Warning icon.svg

Формулировка расплывчата!

Дайте проекту шанс
вырасти большим и хорошим!

FunnyChick.gif
  • Если сомневаетесь в CMS — откажитесь!
  • Если вам продают сайт на CMS — откажитесь!

Вы спросите, а если сайт делает НЕпрограммист?

Тем более не пускайте его за руль CMS!

Пусть лучше заведёт

  • Блог — ЖЖ / blogger / тематические (drive2.ru, …)
  • Wiki (например, на wikia.com)
  • Группу в социальной сети

Выхлопа будет больше, в том числе в плане маркетинга.

Дополнительные проблемы

  • Расчёт на доработку дешёвым ресурсом
    …с плачевными результатами…
  • Закрытая CMS — политическая проститутка
    «любое извращение за ваши деньги»
  • В CMS могут быть полезные идеи и фичи
    но зачастую они погребены под слоем бесполезных…

ЭТАЛОН УЖОСА

1cbitrix.svg

1С БИТРИКС

Примеры «ужоса»

«В профессиональной среде в ходу жаргонизм „говнокод“»

  • Стиль кода «портянка»: 2032 строки, (!!!) 0 функций
  • Само-DOS по 404
  • «Инфоблоки» — кривое объектное ядро, в студию!
  • MVC без модели!, «супер компонент»

Зато «мы стали более лучше одеваться!»*

Зато Битрикс24! И магазин компонентов!

И самая крутая версия ~250000 рублей стоит!

:-( печаль и уныние.


*«Овощи там, рожь!» © Света из Иваново

Битрикс — не единственный пример проблем

УЖАСНЫЙ пример. Но не единственный.

  • Любые движки с EAV, например:
    • Magento
    • WordPress
  • Да и прочие CMS не блещут

…но они хотя бы Open Source.

Фреймворки (PHP)

ОК, CMS не берём.

Frameworks.png

Но PHP-фреймворки-то чем не угодили?

Для начала: что такое фреймворк?

Как и библиотека, это

некий набор подключаемого функционала*


* набор, но не простой

Разница в повсеместной инверсии управления

FW-Lib-IoC.svg

Фреймворки и паттерны

Warning icon.svg

Полезно ли возводить в абсолют
паттерны проектирования? Ой не факт!

«You have a Problem and decide to use Java. Now you have Problem, ProblemImpl, ProblemException and ProblemFactory.»
Хабр: Все используют единую фабрику фабрик фабрик инструментов всякий раз, когда им нужен молоток?…

Проблема — Over-Engineering

Или же, стремление всё чрезмерно обобщить.

  • Лишние слои абстракций
  • «Введение в конфиги всем.ру, том 2»
  • Раннее внедрение излишней расширяемости

Истинное удобство расширения: KISS, YAGNI*


* Keep It Simply Stupid, You Ain't Gonna Need It.

Фреймворки и SAPI

OtherWebNoAPI.svg
PHP-SAPI.svg

Серверов много, API тоже
(модуль/CGI/SCGI/FastCGI/…)

Нет стандарта? ⇒ рождается обёртка
Но в PHP SAPI уже есть! Весьма полное, пусть и процедурное.

Фреймворки и функционал

Типичные вещи: шаблоны, интерфейс БД, сессии, загрузка файлов, SOAP…

  • В языках общего назначения их нет.
    ✓ Тема для фреймворка.
  • Но в PHP есть почти всё
    × Фреймворк добавляет мало функционала.

Что же остаётся PHP-фреймворкам?

Ответ: ОБЁРТКИ!

  • Для всего! иногда в несколько слоёв.
  • Бывают жёсткие, неизменяемые без патчинга.
  • Кроме обёрток — лишь мелкие полезные фичи.

Кроме того

Bus factor.svg

Фреймворк — жирная зависимость!

Для библиотек не подходит
Доп. источник багов и дыр
Проблемы глобальных обновлений
«Автобусный фактор»

Область применения фреймворков

  • Проект простой? × Усложнит реализацию.
  • Проект сложный? × Много уникального прикрутится сбоку.*
  • Библиотека? × Ограничит использование.
  • Проекты, где много однотипного функционала.
    ✓ Подходит! и это сильно шире, чем у CMS.

* Гибкий (пермиссивный) фреймворк хотя бы не навредит.

Плюсы фреймворков

  • Плюс для продажи поддавшимся моде менеджерам
  • Для начинающих разработчиков
    • Ограничитель применения бурной неокрепшей фантазии*
    • Подспорье в обучении

* если фреймворк готовить по канонам.

Закрытые, внутренние, малопопулярные фреймворки

Имеют дополнительные минусы:

  • Плохая документация (а то и отсутствие)
  • Странные практики (PHP Jihad, алиментщик)
  • Политическая проституция (закрытые, внутренние)
  • Невозможность переопределения

Внутренние фреймворки — отдельная песня

  • ☹ Нуждаются в поддержке
  • ☹ Слабо конкурируют с mainstream
  • Склонны к умиранию

Отсюда выводы:

  • Либо OpenSource, либо не полагаться на них
  • Warning icon.svg Обязательно делать пермиссивными, а не жёсткими

Выводы

  • Не поддавайтесь моде! Каждый инструмент имеет свою область применения!
  • Удел применения CMS — быдлосайтики.
  • Удел фреймворков — средние по сложности проекты (+ продажа «модникам»).
  • Плохо ли, что они есть? Да нет. Природа любит разнообразие.

<МЕСТО ДЛЯ ВАШИХ ВОПРОСОВ>

E-mail: Myemail2.png

Наши OpenSource проекты: http://wiki.4intra.net/

$this = http://yourcmc.ru/wiki/CMS-Frameworks