Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dive into DDD // Ruslan

Dive into DDD // Ruslan

Ruslan Gatiyatov's Keynote

04/03/2014

Avatar for Droid Labs

Droid Labs

April 06, 2014
Tweet

More Decks by Droid Labs

Other Decks in Programming

Transcript

  1. План работы 1. Архитектура приложений 2. Границы применимости паттерна ActiveRecord

    3. Предметно-ориентированное проектирование (Domain Driven Design) ! Перерыв ! 1. Монолитная и модульная архитектура приложений 2. Переход от DB-Driven проектирования к Domain Driven проектированию
  2. Архитектура приложений Чем помогает архитектура? ! Николай Рыжиков - “уменьшить

    боль разработки” (HappyDev’13 http://2013.happydev.ru/report/22) ! 1) понятность кода и предметной области 2) Модульность приложения: чем больше система, тем легче добавить новый компонент системы 3) масштабируемость приложения ! Архитектура приложений - это 1) принятые ключевые решения 2) компромисс
  3. Rails плюсы 1) быстрый старт 2) DRY 3) Conventions over

    configuration 4) Многие проблемы уже решены -> gems 5) Красивый DSL (роутер, active record, …) 6) Набор инструкций как решать проблемы
  4. Rails минусы 1) НеПонятность кода/сложность рефакторинга 2) высокая связанность компонентов

    приложения (насколько сильно один модуль приложения зависит от других) 3) низкая связность отдельных моделей 4) отсутствие общих стандартов программирования 5) DB-driven разработка (центр вселенной - это база данных)
  5. Реальность 1) Сложная предметная область 2) Постоянно изменяющиеся требования 3)

    Изменение состава команды/разный уровень подготовки членов команды/несколько команд 4) необходимость масштабируемости
  6. ActiveRecord 1) Persistance/Querying 2) Attributes Casting -> Sanitization 3) Validations

    4) Callbacks 5) Associations 6) Object building + nested attributes 7) Serialization (to_xml, to_json)
  7. Нужно ли задуматься? 1) Модель участвует в нескольких бизнес-процессах (ключевые

    “модели” приложения) -> низкая связность модели 2) Наличие условных валидаций или колбэков 3) Логика модели зависит от роли пользователя 4) Оптимизация производительности приложения 5) Сильная связанность слоев приложения: Application, Domain, Infrastructure
  8. Что делать? - А кто последний? Молчание... - Тогда буду

    первым! ! 1) Сообщество 2) Перенимать практики из Java, .Net и пр
  9. Общие понятия Домен - это совокупность знаний о предметной области

    ! 1) Доменная модель 2) Единый язык (ubiquitous language) 3) Bounded context
  10. Доменные сущности 1) Entity - an object that is not

    defined by its attributes, but rather by a thread of continuity and its identity 2) Value Object - An object that contains attributes but has no conceptual identity. Should be treated as Immutable. 3) Aggregate - A collection of objects that are bound together by a root entity, otherwise known as an aggregate root. 4) Service - implements domain logic when it can’t be done in object. 5) Repository - is an abstraction over persistence store, returning entities or aggregate roots, meeting some criteria 6) Factory - methods for creating domain objects. 7) Domain events
  11. Вопросы к экспертам • Why does it change? • When

    does it change? • How often? • Who causes it? • By which rules? • What consequences?
  12. Когда применять 1) Сложная предметная область 2) Команда разбирается в

    ООП 3) Постоянное общение с доменными экспертами 4) Итеративный процесс разработки ПО