SlideShare a Scribd company logo
1 of 24
Download to read offline
Как разрабатывается фреймворк
                    Yii
       Александр Макаров, Yii core team
Что такое Yii?

   PHP5 MVC фреймворк.               Свой ActiveRecord.
   Лѐгкий и быстрый.                 i18n на основе CLDR.
   Мощный и гибкий.                  Кэш с зависимостями и кучей
   Красивый API.                      бэкэндов.
   Пересекается с Prado, Rails,      RBAC.
    Symfony и… Joomla (в              Консоль.
    хорошем смысле).                  Генератор кода.
                                      …

        Prado (2004) → Yii 1.0 (2008) → Yii 1.1 (2010) → Yii2 (?)
Типичный action

public function actionView($id)
{
       $post = Post::model()->findByPk($id);
       if(!$post)
              throw new CHttpException(404);

      $this->render('view', array(
             'post' => $post,
      ));
}
Более сложный Active Record

$posts = Post::model()->taggedWith(array('yii',
'DevConf', 'PHP'))->published()->with('comments')-
>findAll();

foreach($posts as $post){
    echo $post->title;
    foreach($post->comments as $comment){
        echo $comment->text;
    }
}
Откуда такое название?!

• Yes It Is (2010).
• Easy Efficient Extensible (2009).
• Китайский символ Yi:
   –   Лѐгкость и простота.
   –   Изменчивость и гибкость.
   –   Постоянство. Главные принципы не меняются.



                                           ―Yi ching‖, ―Книга перемен‖.
Зачем велосипед и почему MVC?

•   Во времена Prado не было нормальной альтернативы.
•   Prado заимствовал у ASP.NET. Чужеродно.
•   MVC популярен и удобен.
•   Существующие в 2008-м году фреймворки не устраивали.
Иногда велосипед — это
       хорошо!
Заимствование

• Стоит ли смотреть на других?
• Бездумное копирование — дело
  гиблое.
• Анализ необходим.


                                 ?
Кто «владелец» фреймворка?
        Сообщество                     Компания

 Фреймворк не               × Заинтересована в получении
  подпиливается под            прибыли.
  конкретные проекты.        × Фреймворк часто является
 Заинтересовано в             побочным продуктом
  оттачивании инструмента.     проектов компании.
 Готово к обсуждениям.      × Работает за деньги.
 Работает на репутацию.     × Часто откладывает принятие
 Принимает решения            решений.
  относительно быстро.
Почему BSD?

•   Фреймворк — инструмент.
•   Чтобы код «жил» его должны серьѐзно использовать.
•   Серьѐзно = для получения прибыли.
•   BSD не ограничивает коммерческое использование.
Сообщество

              Yii                        В общем


• Оттянул на себя часть        • Интересные уникальные
  сообщества Prado               решения, рецепты
• Не превратиться в helpdesk   • Собрать лояльное ядро
• Повторяющиеся вопросы →      • Обучить на личном примере,
  wiki, поиск                    что для сообщества хорошо
• Мало пишут — не всегда       • Оставить шанс показать себя
  плохо
Команда Yii
• 6 разработчиков.              • Количество разработчиков
• Технический писатель.           не растѐт т.к. рост означает:
• ~50 переводчиков.                – Больше времени на
                                     общение, меньше на код.
                                   – Возможные конфликты.
• Приоритеты:
   – Стабильность кода.
   – Надѐжность кода.
   – Единый стиль.
Use the force and read the source!
Нет уж, спасибо!
Документация

• Код без документации — мусор.
• Успешность проекта сильно зависит от
  документации.
• Пишем код — обновляем
  документацию.
• Всегда сразу документируем методы,
  классы и свойства.
• Важны примеры, но слишком много
  примеров — тоже плохо.
Почему код должен быть приятным?

• Чтобы проект доставлял разработчику не меньше удовольствия,
  чем пользователям.
• Чтобы не тратить неоправданно много времени на
  документацию.

• Деньги, время, мотивация.
Каким должен быть API?
• Согласованный. Всѐ в одном стиле.
• Не сложный. Сложность = много всего.
   – Магия, если она есть, должна обязательно быть
     однозначной и, по возможности, простой.
• Гибкий. Легко поменять поведение.
• Документированный.

• Гибкость vs простота.
   – Крайности. God object.
• Решение: фасад для скрытия деталей, адаптер для
  выравнивания API.
Готового идеала нет

• В больших проектах всегда приходится что-то подпиливать.
   – Как потом обновлять?
   – Как ничего не сломать?
• В фреймворк нельзя встроить всѐ.
   – Надо ещѐ и сторонний код пилить?
   – А вдруг не заработает?
Версии и обратная совместимость

1.1.x — обратно совместимые релизы.
    – Небольшие документированные изменения.
    – Новые возможности.
    – Подходит для обновления уже начатых проектов.
1.x.0 — частичная несовместимость.
    – Обновить проект возможно, но затратно.
x.0.0 — более свежие возможности без оглядки на обратную
совместимость.
Поддержка старых версий
           Проект                         Фреймворк


• Делается не один месяц, за    • Поддерживать все старые
  это время выходит обратно       версии нереально →
  несовместимая версия.           ограничиваем время
• Немедленное адаптирование       поддержки.
  под неѐ — потеря времени и    • Не перетаскиваем новые
  денег.                          возможности в старые
• Возможно, стоит                 версии. Исправляем ошибки.
  остановиться, но как быть с
  багами в фреймворке?
Инструментарий

• «Одноразовую» миграцию данных в большинстве случаев
  приходится делать много раз.
• Код надо тестировать.
• Однотипный код писать лень.
• IDE должны поддерживать код.
• Отладка — это важно.
Производительность и оптимизация

• Yii быстрый т.к. загружается только то, что нужно.
  Используется SPL __autoload.
• Не подключаемся к БД, пока не понадобится, не парсим запрос
  пока не потребуют и т.д.
• Если код используется часто и много — производительность
  важнее фич.
• Если используется редко — производительность не так важна.
Yii — это хорошо!
Спасибо

•   http://yiiframework.com/
•   http://yiiframework.ru/
•   http://rmcreative.ru/
•   sam@rmcreative.ru

• Принимаются
   – Отзывы
   – Идеи
   – Предложения

More Related Content

What's hot

UWDC'12, Александр Макаров, О командной разработке и фреймворках
UWDC'12, Александр Макаров, О командной разработке и фреймворкахUWDC'12, Александр Макаров, О командной разработке и фреймворках
UWDC'12, Александр Макаров, О командной разработке и фреймворках
Alexander Makarov
 
Библиотека UI компонентов, о которой вы всегда мечтали / Роберт Харитонов (Li...
Библиотека UI компонентов, о которой вы всегда мечтали / Роберт Харитонов (Li...Библиотека UI компонентов, о которой вы всегда мечтали / Роберт Харитонов (Li...
Библиотека UI компонентов, о которой вы всегда мечтали / Роберт Харитонов (Li...
Ontico
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
Alex Tumanoff
 
Creating Open Source Projects
Creating Open Source ProjectsCreating Open Source Projects
Creating Open Source Projects
Alexei Yuzhakov
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Anthony Marchenko
 
инструменты проектирования интерфейсов
инструменты проектирования интерфейсовинструменты проектирования интерфейсов
инструменты проектирования интерфейсов
Oleg Karapuzov
 

What's hot (20)

Как мы делаем Banki.ru
Как мы делаем Banki.ruКак мы делаем Banki.ru
Как мы делаем Banki.ru
 
Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.
 
О фреймворках Backend conf 2016
О фреймворках Backend conf 2016О фреймворках Backend conf 2016
О фреймворках Backend conf 2016
 
Всему своё время Highload Junior 2016
Всему своё время   Highload Junior  2016Всему своё время   Highload Junior  2016
Всему своё время Highload Junior 2016
 
UWDC'12, Александр Макаров, О командной разработке и фреймворках
UWDC'12, Александр Макаров, О командной разработке и фреймворкахUWDC'12, Александр Макаров, О командной разработке и фреймворках
UWDC'12, Александр Макаров, О командной разработке и фреймворках
 
Библиотека UI компонентов, о которой вы всегда мечтали / Роберт Харитонов (Li...
Библиотека UI компонентов, о которой вы всегда мечтали / Роберт Харитонов (Li...Библиотека UI компонентов, о которой вы всегда мечтали / Роберт Харитонов (Li...
Библиотека UI компонентов, о которой вы всегда мечтали / Роберт Харитонов (Li...
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
 
мир без Jsp. thymeleaf 2.0
мир без Jsp. thymeleaf 2.0мир без Jsp. thymeleaf 2.0
мир без Jsp. thymeleaf 2.0
 
Junior java standard edition developer
Junior java standard edition developerJunior java standard edition developer
Junior java standard edition developer
 
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма..."Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
 
Как писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромКак писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодером
 
встать на рельсы
встать на рельсывстать на рельсы
встать на рельсы
 
Алексей Трошин. Менеджер не нужен: быстрые шаблоны правильных коммуникаций
Алексей Трошин. Менеджер не нужен: быстрые шаблоны правильных коммуникацийАлексей Трошин. Менеджер не нужен: быстрые шаблоны правильных коммуникаций
Алексей Трошин. Менеджер не нужен: быстрые шаблоны правильных коммуникаций
 
Илья Климов - Reason: маргиналы против хайпа
Илья Климов - Reason: маргиналы против хайпаИлья Климов - Reason: маргиналы против хайпа
Илья Климов - Reason: маргиналы против хайпа
 
Creating Open Source Projects
Creating Open Source ProjectsCreating Open Source Projects
Creating Open Source Projects
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
 
Курс молодого бойца-автоматизатора – как стать ветераном и остаться в живых
Курс молодого бойца-автоматизатора – как стать ветераном и остаться в живыхКурс молодого бойца-автоматизатора – как стать ветераном и остаться в живых
Курс молодого бойца-автоматизатора – как стать ветераном и остаться в живых
 
Дмитрий Кушников — БЭМ глазами бэкенд-разработчика
Дмитрий Кушников — БЭМ глазами бэкенд-разработчикаДмитрий Кушников — БЭМ глазами бэкенд-разработчика
Дмитрий Кушников — БЭМ глазами бэкенд-разработчика
 
инструменты проектирования интерфейсов
инструменты проектирования интерфейсовинструменты проектирования интерфейсов
инструменты проектирования интерфейсов
 
Как воспитать программиста
Как воспитать программистаКак воспитать программиста
Как воспитать программиста
 

Similar to Devconf 2011 - PHP - Как разрабатывается фреймворк Yii

2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
HappyDev
 
непрерывная интеграция шаг к непрерывному деплою родионов игорь
непрерывная интеграция   шаг к непрерывному деплою родионов игорьнепрерывная интеграция   шаг к непрерывному деплою родионов игорь
непрерывная интеграция шаг к непрерывному деплою родионов игорь
drupalconf
 
Практики масштабирования гибкой разработки
Практики масштабирования гибкой разработкиПрактики масштабирования гибкой разработки
Практики масштабирования гибкой разработки
Askhat Urazbaev
 
Непрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуНепрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойменту
Игорь Родионов
 
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьНепрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
PVasili
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
Ontico
 

Similar to Devconf 2011 - PHP - Как разрабатывается фреймворк Yii (20)

TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
 
Ryazan
RyazanRyazan
Ryazan
 
2 bdw.key
2 bdw.key2 bdw.key
2 bdw.key
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
 
Gitlab devconf
Gitlab devconfGitlab devconf
Gitlab devconf
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма..."Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
 
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
непрерывная интеграция шаг к непрерывному деплою родионов игорь
непрерывная интеграция   шаг к непрерывному деплою родионов игорьнепрерывная интеграция   шаг к непрерывному деплою родионов игорь
непрерывная интеграция шаг к непрерывному деплою родионов игорь
 
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
 
Практики масштабирования гибкой разработки
Практики масштабирования гибкой разработкиПрактики масштабирования гибкой разработки
Практики масштабирования гибкой разработки
 
Непрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуНепрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойменту
 
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьНепрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
 
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9
 

More from Alexander Makarov

UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
Alexander Makarov
 
DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2
Alexander Makarov
 
YiiConf 2012 - Alexander Makarov - Yii2, what's new
YiiConf 2012 - Alexander Makarov - Yii2, what's newYiiConf 2012 - Alexander Makarov - Yii2, what's new
YiiConf 2012 - Alexander Makarov - Yii2, what's new
Alexander Makarov
 
YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоYiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что нового
Alexander Makarov
 
UWDC'12, Александр Макаров, Yii, его разработка и Yii2
UWDC'12, Александр Макаров, Yii, его разработка и Yii2UWDC'12, Александр Макаров, Yii, его разработка и Yii2
UWDC'12, Александр Макаров, Yii, его разработка и Yii2
Alexander Makarov
 
Выбираем PHP-фреймворк. Особенности разработки с фреймворками
Выбираем PHP-фреймворк. Особенности разработки с фреймворкамиВыбираем PHP-фреймворк. Особенности разработки с фреймворками
Выбираем PHP-фреймворк. Особенности разработки с фреймворками
Alexander Makarov
 

More from Alexander Makarov (10)

UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
Yii, frameworks and where PHP is heading to
Yii, frameworks and where PHP is heading toYii, frameworks and where PHP is heading to
Yii, frameworks and where PHP is heading to
 
DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2
 
YiiConf 2012 - Alexander Makarov - Yii2, what's new
YiiConf 2012 - Alexander Makarov - Yii2, what's newYiiConf 2012 - Alexander Makarov - Yii2, what's new
YiiConf 2012 - Alexander Makarov - Yii2, what's new
 
YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоYiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что нового
 
UWDC'12, Александр Макаров, Yii, его разработка и Yii2
UWDC'12, Александр Макаров, Yii, его разработка и Yii2UWDC'12, Александр Макаров, Yii, его разработка и Yii2
UWDC'12, Александр Макаров, Yii, его разработка и Yii2
 
Devconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developedDevconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developed
 
Выбираем PHP-фреймворк. Особенности разработки с фреймворками
Выбираем PHP-фреймворк. Особенности разработки с фреймворкамиВыбираем PHP-фреймворк. Особенности разработки с фреймворками
Выбираем PHP-фреймворк. Особенности разработки с фреймворками
 
Yii rit 2010
Yii rit 2010Yii rit 2010
Yii rit 2010
 

Recently uploaded

ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 

Recently uploaded (9)

ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 

Devconf 2011 - PHP - Как разрабатывается фреймворк Yii

  • 1. Как разрабатывается фреймворк Yii Александр Макаров, Yii core team
  • 2. Что такое Yii?  PHP5 MVC фреймворк.  Свой ActiveRecord.  Лѐгкий и быстрый.  i18n на основе CLDR.  Мощный и гибкий.  Кэш с зависимостями и кучей  Красивый API. бэкэндов.  Пересекается с Prado, Rails,  RBAC. Symfony и… Joomla (в  Консоль. хорошем смысле).  Генератор кода.  … Prado (2004) → Yii 1.0 (2008) → Yii 1.1 (2010) → Yii2 (?)
  • 3. Типичный action public function actionView($id) { $post = Post::model()->findByPk($id); if(!$post) throw new CHttpException(404); $this->render('view', array( 'post' => $post, )); }
  • 4. Более сложный Active Record $posts = Post::model()->taggedWith(array('yii', 'DevConf', 'PHP'))->published()->with('comments')- >findAll(); foreach($posts as $post){ echo $post->title; foreach($post->comments as $comment){ echo $comment->text; } }
  • 5. Откуда такое название?! • Yes It Is (2010). • Easy Efficient Extensible (2009). • Китайский символ Yi: – Лѐгкость и простота. – Изменчивость и гибкость. – Постоянство. Главные принципы не меняются. ―Yi ching‖, ―Книга перемен‖.
  • 6. Зачем велосипед и почему MVC? • Во времена Prado не было нормальной альтернативы. • Prado заимствовал у ASP.NET. Чужеродно. • MVC популярен и удобен. • Существующие в 2008-м году фреймворки не устраивали.
  • 7. Иногда велосипед — это хорошо!
  • 8. Заимствование • Стоит ли смотреть на других? • Бездумное копирование — дело гиблое. • Анализ необходим. ?
  • 9. Кто «владелец» фреймворка? Сообщество Компания  Фреймворк не × Заинтересована в получении подпиливается под прибыли. конкретные проекты. × Фреймворк часто является  Заинтересовано в побочным продуктом оттачивании инструмента. проектов компании.  Готово к обсуждениям. × Работает за деньги.  Работает на репутацию. × Часто откладывает принятие  Принимает решения решений. относительно быстро.
  • 10. Почему BSD? • Фреймворк — инструмент. • Чтобы код «жил» его должны серьѐзно использовать. • Серьѐзно = для получения прибыли. • BSD не ограничивает коммерческое использование.
  • 11. Сообщество Yii В общем • Оттянул на себя часть • Интересные уникальные сообщества Prado решения, рецепты • Не превратиться в helpdesk • Собрать лояльное ядро • Повторяющиеся вопросы → • Обучить на личном примере, wiki, поиск что для сообщества хорошо • Мало пишут — не всегда • Оставить шанс показать себя плохо
  • 12. Команда Yii • 6 разработчиков. • Количество разработчиков • Технический писатель. не растѐт т.к. рост означает: • ~50 переводчиков. – Больше времени на общение, меньше на код. – Возможные конфликты. • Приоритеты: – Стабильность кода. – Надѐжность кода. – Единый стиль.
  • 13. Use the force and read the source!
  • 15. Документация • Код без документации — мусор. • Успешность проекта сильно зависит от документации. • Пишем код — обновляем документацию. • Всегда сразу документируем методы, классы и свойства. • Важны примеры, но слишком много примеров — тоже плохо.
  • 16. Почему код должен быть приятным? • Чтобы проект доставлял разработчику не меньше удовольствия, чем пользователям. • Чтобы не тратить неоправданно много времени на документацию. • Деньги, время, мотивация.
  • 17. Каким должен быть API? • Согласованный. Всѐ в одном стиле. • Не сложный. Сложность = много всего. – Магия, если она есть, должна обязательно быть однозначной и, по возможности, простой. • Гибкий. Легко поменять поведение. • Документированный. • Гибкость vs простота. – Крайности. God object. • Решение: фасад для скрытия деталей, адаптер для выравнивания API.
  • 18. Готового идеала нет • В больших проектах всегда приходится что-то подпиливать. – Как потом обновлять? – Как ничего не сломать? • В фреймворк нельзя встроить всѐ. – Надо ещѐ и сторонний код пилить? – А вдруг не заработает?
  • 19. Версии и обратная совместимость 1.1.x — обратно совместимые релизы. – Небольшие документированные изменения. – Новые возможности. – Подходит для обновления уже начатых проектов. 1.x.0 — частичная несовместимость. – Обновить проект возможно, но затратно. x.0.0 — более свежие возможности без оглядки на обратную совместимость.
  • 20. Поддержка старых версий Проект Фреймворк • Делается не один месяц, за • Поддерживать все старые это время выходит обратно версии нереально → несовместимая версия. ограничиваем время • Немедленное адаптирование поддержки. под неѐ — потеря времени и • Не перетаскиваем новые денег. возможности в старые • Возможно, стоит версии. Исправляем ошибки. остановиться, но как быть с багами в фреймворке?
  • 21. Инструментарий • «Одноразовую» миграцию данных в большинстве случаев приходится делать много раз. • Код надо тестировать. • Однотипный код писать лень. • IDE должны поддерживать код. • Отладка — это важно.
  • 22. Производительность и оптимизация • Yii быстрый т.к. загружается только то, что нужно. Используется SPL __autoload. • Не подключаемся к БД, пока не понадобится, не парсим запрос пока не потребуют и т.д. • Если код используется часто и много — производительность важнее фич. • Если используется редко — производительность не так важна.
  • 23. Yii — это хорошо!
  • 24. Спасибо • http://yiiframework.com/ • http://yiiframework.ru/ • http://rmcreative.ru/ • sam@rmcreative.ru • Принимаются – Отзывы – Идеи – Предложения