Стандарты и соглашения в сложных ООП-приложениях

2,610 views

Published on

Презентация Антона Макареко

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,610
On SlideShare
0
From Embeds
0
Number of Embeds
1,510
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Стандарты и соглашения в сложных ООП-приложениях

  1. 2. Стандарты и соглашения в   сложных ООП-приложениях <ul><li>Стандарты оформления кода </li></ul><ul><li>Шаблоны проектирования в   архитектуре проекта </li></ul><ul><li>Построение иерархии моделей для   решения задач бизнес-логики </li></ul><ul><li>Классификация данных на разных уровнях MVC- приложения </li></ul>
  2. 3. 1. Стандарты оформления кода
  3. 4. Зачем нужны стандарты оформления кода <ul><li>Команда говорит на одном языке </li></ul><ul><li>Важно для больших объемов кода </li></ul><ul><li>Необходимо для проектов с открытыми исходниками </li></ul><ul><li>Раскрывает возможности различных IDE </li></ul>
  4. 5. Составляющие стандартов кода <ul><li>Файловая структура и именование файлов </li></ul><ul><li>Именование классов, методов и переменных </li></ul><ul><li>Стиль кода </li></ul><ul><li>Техническая документация к коду </li></ul>
  5. 6. Сравнительная характеристика стандартов <ul><li>Zend Framework </li></ul><ul><li>Изначально под php5 </li></ul><ul><li>Базовые требования phpdoc (структура пакета, лицензия) </li></ul><ul><li>Не определяет процесс релизов и проекты </li></ul><ul><li>Изменений немного </li></ul><ul><li>PEAR </li></ul><ul><li>Развивался с php4 </li></ul><ul><li>Больше требований phpdoc (информация о релизах, авторах) </li></ul><ul><li>Подразумевает процесс разработки проектов PEAR </li></ul><ul><li>За последнее время сильно мутировал </li></ul>
  6. 7. Принятие стандарта в  open-soruce -проекте <ul><li>Всегда: основные положения по форматированию и именованию </li></ul><ul><li>Иногда: собственная «шапка» и лицензия в  phpdoc </li></ul><ul><li>Никогда: личная информация в комментариях или phpdoc </li></ul>
  7. 8. 2. Шаблоны проектирования
  8. 9. Архитектурный шаблон MVC <ul><li>Классифицирует объекты и базовый алгоритм взаимодействия </li></ul><ul><li>Определяет роль любого объекта в системе </li></ul><ul><li>Вводит ограничения на использование данных и управляющие вызовы </li></ul>
  9. 10. Шаблон Registry <ul><li>Назначение: обычно глобальный объект, иногда данные </li></ul><ul><li>Место в MVC : Controller, View </li></ul><ul><li>Плюс: легкий доступ отовсюду </li></ul><ul><li>Минус: связывание кода </li></ul>
  10. 11. Шаблон Observer <ul><li>Назначение: подписчик, обработчик событий </li></ul><ul><li>Место в MVC : в любой части </li></ul><ul><li>Плюс: возможность соблюдения независимости модулей системы </li></ul><ul><li>Минус: сложно отлаживать, иногда конфликты с другими подписчиками </li></ul>
  11. 12. Шаблон Iterator <ul><li>Назначение: модель с набором данных (коллекция) </li></ul><ul><li>Место в MVC: Model </li></ul><ul><li>Плюс: возможность отложенной загрузки данных, инкапсуляция получения элементов </li></ul>
  12. 13. Шаблон Adapter <ul><li>Назначение: выравнивание интерфейсов, утилитарная модель </li></ul><ul><li>Место в MVC: Model </li></ul><ul><li>Плюс: абстракция ресурсов </li></ul>
  13. 14. Шаблон Strategy <ul><li>Назначение: общий интерфейс для разных алгоритмов поведения </li></ul><ul><li>Место в MVC: Model </li></ul><ul><li>Плюс: расширяемость вариантов использования одной сущности </li></ul><ul><li>Минус: связанность объекта контекста и стратегии </li></ul>
  14. 15. 3. Иерархия моделей
  15. 16. Иерархический подход к набору моделей приложения <ul><li>Управляющие модели </li></ul><ul><ul><li>Модели знаний </li></ul></ul><ul><ul><li>Модели сущностей </li></ul></ul><ul><ul><ul><li>Ресурс-модели, адаптеры </li></ul></ul></ul>
  16. 17. Критерии для создания иерархии моделей <ul><li>Сложность задачи </li></ul><ul><li>Необходимость реализации различных вариантов использования </li></ul><ul><li>Требования к расширяемости приложения </li></ul>
  17. 18. Разделение ответственности <ul><li>Определение роли модели </li></ul><ul><li>Объявление структуры обмениваемых данных </li></ul><ul><li>Зависимости, ограничения по использованию других моделей </li></ul>
  18. 19. Публичный интерфейс <ul><li>Лаконичный </li></ul><ul><li>Понятный </li></ul><ul><li>Ожидаемый </li></ul>
  19. 20. 4. Данные в MVC- приложении
  20. 21. Обмен данными между архитектурными слоями MVC <ul><li>Представьте себе потоки данных </li></ul><ul><li>Попробуйте их классифицировать </li></ul><ul><li>Откуда данные берутся? </li></ul><ul><li>Где и как их нужно хранить? </li></ul>
  21. 22. Обмен данными между моделями <ul><li>Опять: публичный и приватный интерфейс </li></ul><ul><li>Константы </li></ul><ul><li>Хранение, распространение, продажа... </li></ul>
  22. 23. Классификация данных в контроллере <ul><li>Управляющие данные: параметры маршрутизации </li></ul><ul><li>Данные: параметры запроса (сессии в том числе) </li></ul>
  23. 24. Классификация данных в моделях <ul><li>Управляющие данные: </li></ul><ul><ul><li>сопутствующие объекты </li></ul></ul><ul><ul><li>«флажки» </li></ul></ul><ul><ul><li>справочная информация/константы </li></ul></ul><ul><li>Данные: САБЖ  </li></ul>
  24. 25. Классификация данных во  View <ul><li>Управляющие данные: </li></ul><ul><ul><li>те же сопутствующие объекты </li></ul></ul><ul><ul><li>те же флажки </li></ul></ul><ul><li>Данные: </li></ul><ul><ul><li>все что надо сугубо шаблону </li></ul></ul><ul><ul><li>в том числе, результаты промежуточных подсчетов </li></ul></ul>
  25. 26. Спасибо! <ul><li>http://mageconf.com/ </li></ul><ul><li>[email_address] </li></ul>
  26. 27. 5. Схема реализации PayPal Express Checkout
  27. 28. Контроллер и модель Checkout <ul><li>Контроллер </li></ul><ul><li>startAction() </li></ul><ul><li>returnAction() </li></ul><ul><li>cancelAction() </li></ul><ul><li>reviewAction() </li></ul><ul><li>editAction() </li></ul><ul><li>saveShippingMethodAction() </li></ul><ul><li>placeOrderAction() </li></ul><ul><li>_initToken($setToken = null) </li></ul><ul><li>Модель </li></ul><ul><li>start($returnUrl, $cancelUrl) </li></ul><ul><li>returnFromPaypal($token) </li></ul><ul><li>prepareOrderReview($token = null) </li></ul><ul><li>updateShippingMethod($methodCode) </li></ul><ul><li>placeOrder($token, $shippingMethodCode = null) </li></ul>
  28. 29. Модели Pro и Config <ul><li>Модель Website Payments Pro: общая бизнес-логика вызовов платежной системы </li></ul><ul><li>Config: справочная информация о константах и зависимостях </li></ul>
  29. 30. Модель платежного метода <ul><li>Создание вызовов платежной системы </li></ul><ul><li>Передача информации по транзакции в объект платежа </li></ul>
  30. 31. Модель API <ul><li>Адаптер непосредственных вызовов шлюза платежной системы </li></ul><ul><li>Обслуживает всю группу платежных методов Website Payments Pro </li></ul>
  31. 32. The End

×