SlideShare a Scribd company logo
1 of 145
Download to read offline
DDD workshop
for Java developers

  Бибичев Андрей
     январь 2010 г.
I. Вводная
xDD / История DDD / Domain Model
ДЮДЮКИ:
                     Самая известная


TDD
Test-Driven Development
                        практика




                                  Нынче очень модное
                              направление проектирования


      DDD                                                          Сменщик

           Domain-Driven Design            BDD                       TDD


                                             Behaviour-Driven Development
                    Одна из самых
                     навороченных
FDD                Agile-методологий
                                              VDD
                                                               Как затуманить
                                                               заказчику мозги
Feature-Driven Development
                                                  Value-Driven Development
DDD
Domain-Driven Design
История
                            2004 год
                            Eric Evans
«Domain-Driven Design - Tackling Complexity in the Heart of Software»
http://www.infoq.com/domain-driven-design




                   ...
Domain (словарь)
• наследственная собственность; имение,
  поместье; земли; владение         e.g. DNS
• территория, зона, область, район
  (отмеченные некоторыми физическими
  особенностями)
• сфера (интересов), поле (деятельности),
  область (знаний)             В данном случае
                                   этот смысл
• область определения (мат.)
                                Домен поля
                               таблицы в БД
Т.е. это о


Business Domain
   Предметной области
        и


 Business Logic
            Бизнес-логики
«Attention was diverted away
from rich logic and deep solutions,
because there was so much value
in just getting data onto the web,
along with very simple behavior.

But now that basic level of web
usage has largely been
assimilated, and projects are
starting to get more ambitious
again about business logic.»
Центральная роль в
   мышлении,
 проектировании,
   реализации
                     DDD
Пример: есть сайт конференции,
надо сделать голосование за доклад
О чем вы прежде всего
   начнете думать?




                  
О чем вы прежде всего
     начнете думать?




votes
                      
О чем вы прежде всего
   начнете думать?




                        
О чем вы прежде всего
   начнете думать?




                        
/
История из жизни или
«Когда я был маленьким …»
Три аспекта DDD
II. Моделирование
 Модель / Элементы UML / Пример
   / Интерактивный практикум
Модель –
      это упрощенное




                               Простота != Примитивность
 приближение реальности.

   Максимально простое,
  при условии достаточной
близости к действительности.
Нам это знакомо
   со школы
Ньютон
Эйнштейн
Шредингер
Дирак
В физике в качестве
 формализма для
моделей используют
  мат.аппарат, а в
программировании
уже лет 20 – ООП:
Гради Буч
А в качестве
 граф. нотации –

      UML
в режиме эскизного
 проектирования:
Графическая
                                                 нотация
                        ЭСКИЗИРОВАНИЕ
                       (набросок от руки)



   Способы               Проектирование
использования               (чертеж)
     UML




                                                    Метамодель
                       Программирование
                   (граф.представление кода)


                Executable UML, MDA, PIM
/
Модель предметной области;                            Модель программы;
    Словарь терминов                                 Понимание чужого кода




                                                 Системная
            Бизнес-анализ                       архитектура
        (анализ требований)                 (проектирование)

                             Документирование


       Понятия из                      Представление конструкций языка.
   предметной области               Ограничения по приемам проектирования



 Движение слева направо по мере уточнения, детализации и реализации
Нюансы терминологии:
 Класс                Сущность
  (class)               (entity)
 Наследование         Обобщение
  (inheritance)         (generalization)




                                           Функциональность
 Свойство             Атрибут




                                               (feature)
  (property)            (attribute)
 Метод                Операция
  (method)              (operation)
 Ссылка, связь        Ассоциация
  (reference, link)     (association)


            ПО        Предметная
                        область
Упражнение 1
 (разминка)
Система продажи
билетов на самолет
• Эксперт: Есть аэропорты. Для каждого известны:
           название на местом языке,
           уникальный латинский код
           и GPS-координаты.
• Мы:
• Эксперт: Аэропорты расположены в городах.
           Для каждого города известно его
           название (на местном и англ. языках).
           Причем известно расстояние от аэропорта
           до центра города, к которому он «приписан».
• Мы:
• Эксперт: Для каждого города есть информация
           о стране, в которой он находится.

• Мы:
Шаг 4

• Есть информация по рейсам самолетов:
  номер рейса (уникален), аэропорты вылета
  и прилета
• Время вылета по местному времени
  города, из которого производится вылет
• Время прилета по местному времени
  города, из которого производится вылет
Шаг 5

• Можно ли реализовать вычислимые
  атрибуты:
  – Время вылета по гринвичу
  – Время прилета по гринвичу
  – Время в пути
• Если нет, то чего для этого не хватает
  (добавьте это на диаграмму вместе с
  вычислимыми атрибутами)
Шаг 6

• Рейсы делятся на регулярные и чартерные
• Для регулярных рейсов известно
  расписание их полетов в днях недели (по
  каким дням недели осуществляется рейс)
• Для чартерных рейсов расписание задается
  как просто конкретные даты, по которым
  выполняется рейс
Шаг 7

• Для всех рейсов есть информация по
  модели самолета, на которой
  осуществляется перелет, со следующими
  характеристиками:
  – Название модели
  – Количество мест эконом-класса
  – Количество мест бизнес-класса
  – Наличие курящего салона и количество мест в
    нём
Шаг 8
• Кроме того, для всех рейсов известна компания-
  перевозчик
• А у каждого перевозчика есть свой набор тарифов,
  каждый из которых определяет:
  – Цену билета на соответствующий вид места (бизнес-
    класс, эконом-класс, курящий салон)
  – Причем цена зависит от степени наполнения самолета
    (в каком диапазоне лежит количество проданных
    билетов на данный вид мест)
• Тарифы действуют определенный промежуток
  времени
• Для рейса известен тариф, по которому продаются
  билеты в настоящее время
Шаг 9

• В системе есть информация по наличию
  свободных мест (для каждого класса) с
  учетом возможной брони
• Причем необходимо показывать текущую
  цену, по которой в данный момент
  продаются билеты заданного класса на
  данный рейс (на дату)
Шаг 10

• Дальше можно вспомнить что еще бывают
  всякие скидки, детские билеты, перенос
  рейсов, отмена и т.д.
• НО МЫ ЭТОГО ДЕЛАТЬ НЕ БУДЕМ 
А где методы?
Упражнение 2
 (интерактив)
   
Итого
Feature-Driven Development (FDD):

Разработка           Составление             Планирование
общей модели         списка функций



                     Список функций        План разработки
                     (Feature list)        (A development plan)




                                           1 – 3 недели
                               Design by              Build by feature
Диаграмма классов              feature
предметной области


                                           Отгрузка!
История из жизни или
«Когда я был маленьким …»
III. Реализация в коде
  Шаблоны / Варианты архитектур /
    Распределенные дилеммы
СУБД       Модель    ОО-язык
 таблица     сущность     класс
  поле        атрибут    свойство
   FK          cвязь     ссылка
 хранимая
             действие     метод
процедура
Идентификация:
  - два объекта, один и тот же аэропорт


     Жизненный цикл объекта:
  - создание /модификация / удаление

                Создание
                                 Отражение в
 Чтение из                        хранилище
               Модификация
хранилища

                   Удаление из
                    хранилища
Базовые классы – опционально!
   Альтернатива: интерфейс.

    
Самый известный
   Value-object
Value object
• Неизменность объекта (Immutable)
  – можно безопасно передавать

• Сравнение объектов = сравнение данных
  – позволяет распознавать одинаковые значения,
    представленные в виде разных объектов

• Инкапсулирует проверку корректности значения
  – «Build-in anticorruption layer»

• Обеспечивает строгую типизацию
  – случайно не передашь Code вместо Name и наоборот
Mapping этого хозяйства на БД
AIRPORTS
CODE (PK)   NAME         LATITUDE   LONGITUDE




DME         Домодедово   12345      67890

    
    
TARIFFS
ID (PK)   NAME      …
                        TARIFF_ITEMS
                        TARIFF_ID (FK) SEAT_KIND   PRICE


                        12345         Эконом       100
12345     Любимый       12345         Бизнес       1000
                        12345         Стоя         10

    
    


Задача
Во многих местах логики и тестов
создавать рейс по:
• Код аэропорта Откуда
• Код аэропорта Куда
• UN модели самолета
• ИНН компании перевозчика

 
 


Сервисы
• Уровня доменной модели (Domain Servicies)
  – Инфраструктурные (API к системе сообщений, API
    для интеграции с внешними системами, …)
  – Согласованная работа с несколькими объектами
    («уволить всех сотрудников на заданную букву», …)
  – Комбинированная алгоритмика (прокладка
    маршрутов, подбор оптимальных вариантов, …)


• Уровня приложения (Application Servicies)
  – чуть позже

                               
                               
                              
                              
                               

              !!!
Используете ORM   =>   У вас DDD
Но ORM может сильно облегчить работу:

                     + возня с value-типами
                     + возня с агрегатами
Дополнительные полезные
             шаблоны
1. Specification
  –   http://www.martinfowler.com/apsupp/spec.pdf


2. DomainEvent
  –   http://martinfowler.com/eaaDev/DomainEvent.html


3. NullObject
  –   http://www.owlnet.rice.edu/~comp212/00-
      spring/handouts/week06/null_object_revisited.htm


4. Builder
  –   http://www.ddj.com/java/208403883?pgno=2
Архитектура
Картинка из книжки
UI (User Interface):

the easiest to understand, this layer is the
responsible of displaying information to the user,
and accept new data. It could be implemented for
web, desktop, or any presentation technology,
present or future. For example, it could be a voice
application, that interacts with the user via a phone.
The acid test for our design is that a radical change
in user interface should have minimal (or controlled,
at least) impact in the rest of the system.
Application Layer:

it’s in charge of coordinating the actions to be
performed on the domain. There are no business
rules or domain knowledge here. No business state
resides in this layer. It delegates all domain actions
to the domain. It could coordinate many actions
(possibly in many domains). It could prepare the
infrastructure to be ready to work with the domain
for an specific action (for example, preparing
transaction scopes).
Domain Layer:

In this layer resides the heart of software, according
to Evans. Business rules and logic lives inside this
layer. Business entity state and behavior is defined
and used here. Communication with other systems,
persistence details, are forwarded to the
infrastruсture layer. Patterns: Entities, Value Objects,
Services, Repositories and Factories.
Infrastructure Layer:

God and devil are in the details, and in the
infrastructure layer. Its main responsability is the
persistence of the business state, most frequently,
using a relational database.

The infrastructure consists of everything that exists
independently of our application: external libraries,
database engine, application server, messaging
backend and so on.
Обратите внимание,
  на направление
   зависимостей
  и наследования
Уточненная картинка
Interface:

This layer holds everything that interacts with other
systems, such as web services, RMI interfaces or
web applications, and batch processing frontends. It
handles interpretation, validation and translation of
incoming data. It also handles serialization of
outgoing data, such as HTML or XML across HTTP to
web browsers or web service clients, or DTO classes
and distributed facade interfaces for remote Java
clients.
Infrastructure:
Infrastructure consists of everything that exists
independently of our application: external libraries,
database engine, application server, messaging
backend and so on.
Also, we consider code and configuration files that
glues the other layers to the infrastructure as part of
the infrastructure layer. Looking for example at the
persistence aspect, the database schema definition,
Hibernate configuration and mapping files and
implementations of the repository interfaces are
part of the infrastructure layer.
Infrastructure




                                          Application
Framework                         Model




                              ?


                                          Domain
                Persistance
Rich               Pure
Domain Model       Domain Model


       Model            Model




                                    IoC


     Persistance      Persistance
Model

       Domain Model
                       Airport    AirportRepository   Mapping
                                                      Metadata
Rich




                                  Persistance




                      EnityBase   RepositoryBase       Utils
Model




                            Airport      AirportRepository
       Domain Model
Pure


                      «depends»
                                              «implement»


                                          Persistance




                          Mapping     AirportRepository
                                                             Utils
                           Metadata          Impl
A Pure Object-oriented Domain Model
            by a DB Guy
 http://www.devx.com/vb2themax/Article/19892/0/page/1
 http://www.devx.com/vb2themax/Article/19892/0/page/2
 http://www.devx.com/vb2themax/Article/19892/0/page/3
 http://www.devx.com/vb2themax/Article/19892/0/page/4
А еще есть
               (анти?)паттерн
        Anemic Domain Model
http://www.martinfowler.com/bliki/AnemicDomainModel.html




• Набор getter-ов и setter-ов == Typed Record
• Вся логика в сервисах в процедурном стиле
В каких из сервисов?




                       
                       
Постоянно себя спрашивайте:
 можно ли, используя public API доменной
      модели, нарушить целостность,
согласованность и консистентность данных?
Распространенные
    дилеммы
Pure


Rich      Anemic
Unit of
          work


                 Explicit
Active
                  state
Record
               transition
http://www.infoq.com/presentations/greg-young-unshackle-qcon08
Simple
       Reference



Lazy Load     Value of
Reference        FK
Happy
              Day



Optimistic          Pessimistic
 Locking             Locking
IV. Заключение
Размер моделей/ Современные
   тенденции / Литература
DDD для
простых моделей
По идее, всё нацелено на достаточно сложные модели:




     Но на практике эффективно используется
      и для несложных предметных областей
http://www.infoq.com/
presentations/rebuild-guardian-ddd-wills
http://www.infoq.com/
presentations/rebuild-guardian-ddd-wills
http://www.infoq.com/
presentations/rebuild-guardian-ddd-wills
Современные
 тенденции
Хоцца «аналогов» SQL и xxxMyAdmin
но для компонентов DomainModel, а не СУБД
Метаданные
    и
метамодель
DSL
Domain Specific Language
Литература
    &
 Ресурсы
http://www.infoq.com/news/2006/12/
        domain-driven-design
http://rsdn.ru/
Forum/MsgList.aspx?gid=17
http://www.infoq.com/domain-driven-design




                   ...
http://domaindrivendesign.org/
http://dddsample.sourceforge.net/
Спасибо за
        внимание!

                biBIGone@gmail.com
http://www.google.com/profiles/biBIGone

More Related Content

Viewers also liked

DDD - модель вместо требований
DDD - модель вместо требованийDDD - модель вместо требований
DDD - модель вместо требованийSQALab
 
Implementing DDD Concepts in PHP
Implementing DDD Concepts in PHPImplementing DDD Concepts in PHP
Implementing DDD Concepts in PHPSteve Rhoades
 
О usability водопроводных кранов
О usability водопроводных крановО usability водопроводных кранов
О usability водопроводных крановAndrey Bibichev
 
Anemic Domain Model - антипаттерн или SOLID?
Anemic Domain Model - антипаттерн или SOLID?Anemic Domain Model - антипаттерн или SOLID?
Anemic Domain Model - антипаттерн или SOLID?GoSharp
 
Domain Driven Design - как, почему и зачем?
Domain Driven Design - как, почему и зачем?Domain Driven Design - как, почему и зачем?
Domain Driven Design - как, почему и зачем?ngrebnev
 
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Oleg Poludnenko
 
Применение DDD подхода в Symfony 2 приложении
Применение DDD подхода в Symfony 2 приложенииПрименение DDD подхода в Symfony 2 приложении
Применение DDD подхода в Symfony 2 приложенииАнтон Шабовта
 
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!Kacper Gunia
 
DDD Modeling Workshop
DDD Modeling WorkshopDDD Modeling Workshop
DDD Modeling WorkshopDennis Traub
 
рентабельный код
рентабельный кодрентабельный код
рентабельный кодMax Arshinov
 
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.Pavel Tsukanov
 
Введение в Knockout
Введение в Knockout Введение в Knockout
Введение в Knockout Pavel Tsukanov
 
Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)Pavel Tsukanov
 
Sql azure federations
Sql azure federations Sql azure federations
Sql azure federations Pavel Tsukanov
 
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИSIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИPavel Tsukanov
 
Thinking in parallel ab tuladev
Thinking in parallel ab tuladevThinking in parallel ab tuladev
Thinking in parallel ab tuladevPavel Tsukanov
 
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...Pavel Tsukanov
 
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVMKNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVMPavel Tsukanov
 

Viewers also liked (20)

DDD - модель вместо требований
DDD - модель вместо требованийDDD - модель вместо требований
DDD - модель вместо требований
 
Introduction to Domain-Driven Design
Introduction to Domain-Driven DesignIntroduction to Domain-Driven Design
Introduction to Domain-Driven Design
 
Implementing DDD Concepts in PHP
Implementing DDD Concepts in PHPImplementing DDD Concepts in PHP
Implementing DDD Concepts in PHP
 
О usability водопроводных кранов
О usability водопроводных крановО usability водопроводных кранов
О usability водопроводных кранов
 
Anemic Domain Model - антипаттерн или SOLID?
Anemic Domain Model - антипаттерн или SOLID?Anemic Domain Model - антипаттерн или SOLID?
Anemic Domain Model - антипаттерн или SOLID?
 
Domain Driven Design - как, почему и зачем?
Domain Driven Design - как, почему и зачем?Domain Driven Design - как, почему и зачем?
Domain Driven Design - как, почему и зачем?
 
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
 
Применение DDD подхода в Symfony 2 приложении
Применение DDD подхода в Symfony 2 приложенииПрименение DDD подхода в Symfony 2 приложении
Применение DDD подхода в Symfony 2 приложении
 
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!
 
DDD Modeling Workshop
DDD Modeling WorkshopDDD Modeling Workshop
DDD Modeling Workshop
 
рентабельный код
рентабельный кодрентабельный код
рентабельный код
 
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
 
Введение в Knockout
Введение в Knockout Введение в Knockout
Введение в Knockout
 
Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)
 
Sql azure federations
Sql azure federations Sql azure federations
Sql azure federations
 
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИSIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
 
Thinking in parallel ab tuladev
Thinking in parallel ab tuladevThinking in parallel ab tuladev
Thinking in parallel ab tuladev
 
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
 
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVMKNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
 
RESPONSIVE WEB DESIGN
RESPONSIVE WEB DESIGNRESPONSIVE WEB DESIGN
RESPONSIVE WEB DESIGN
 

Similar to DDD Workshop

Обзор Feature-Driven Development и Domain-Driven Design
Обзор Feature-Driven Development и Domain-Driven DesignОбзор Feature-Driven Development и Domain-Driven Design
Обзор Feature-Driven Development и Domain-Driven DesignAndrey Bibichev
 
Software Engineering Knowledge Matrix
Software Engineering Knowledge MatrixSoftware Engineering Knowledge Matrix
Software Engineering Knowledge MatrixOlena Syrota
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)Alexander Gornik
 
DDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в кодDDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в кодCUSTIS
 
Проектирование интерфейсов
Проектирование интерфейсовПроектирование интерфейсов
Проектирование интерфейсовVladimir Zimin
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseAlexander Granin
 
3 средства автоматизации проектирования корпоративных приложений
3 средства автоматизации проектирования корпоративных приложений3 средства автоматизации проектирования корпоративных приложений
3 средства автоматизации проектирования корпоративных приложенийKewpaN
 
Унификация взаимодействия
Унификация взаимодействияУнификация взаимодействия
Унификация взаимодействияNikita Efimov
 
Никита Ефимов Lead UX Architect, New Cloud Technologies
Никита Ефимов Lead UX Architect, New Cloud Technologies Никита Ефимов Lead UX Architect, New Cloud Technologies
Никита Ефимов Lead UX Architect, New Cloud Technologies Anton Anokhin
 
C++ осень 2012 лекция 7
C++ осень 2012 лекция 7C++ осень 2012 лекция 7
C++ осень 2012 лекция 7Technopark
 
А.Левенчук -- Будущее проектирования
А.Левенчук -- Будущее проектированияА.Левенчук -- Будущее проектирования
А.Левенчук -- Будущее проектированияAnatoly Levenchuk
 
Разработчик, аналитик, заказчик — как найти общий язык?
Разработчик, аналитик, заказчик — как найти общий язык?Разработчик, аналитик, заказчик — как найти общий язык?
Разработчик, аналитик, заказчик — как найти общий язык?ngrebnev
 
документирование долгоживущих веб проектов. г. белогорцев. зал 3
документирование долгоживущих веб проектов. г. белогорцев. зал 3документирование долгоживущих веб проектов. г. белогорцев. зал 3
документирование долгоживущих веб проектов. г. белогорцев. зал 3rit2011
 
Понятия технологии разработки объектно-ориентированных информационных систем ...
Понятия технологии разработки объектно-ориентированных информационных систем ...Понятия технологии разработки объектно-ориентированных информационных систем ...
Понятия технологии разработки объектно-ориентированных информационных систем ...Aimurat Adilbekov
 
Разработка требований и Проектирование интерфейсов
Разработка требований и Проектирование интерфейсовРазработка требований и Проектирование интерфейсов
Разработка требований и Проектирование интерфейсовDenis Beskov
 
METRO. Дизайн для Windows Phone
METRO. Дизайн для Windows PhoneMETRO. Дизайн для Windows Phone
METRO. Дизайн для Windows PhoneNikita Lukianets
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)Alexander Gornik
 
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"GeeksLab Odessa
 

Similar to DDD Workshop (20)

Обзор Feature-Driven Development и Domain-Driven Design
Обзор Feature-Driven Development и Domain-Driven DesignОбзор Feature-Driven Development и Domain-Driven Design
Обзор Feature-Driven Development и Domain-Driven Design
 
Software Engineering Knowledge Matrix
Software Engineering Knowledge MatrixSoftware Engineering Knowledge Matrix
Software Engineering Knowledge Matrix
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
DDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в кодDDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в код
 
Проектирование интерфейсов
Проектирование интерфейсовПроектирование интерфейсов
Проектирование интерфейсов
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
BDD
BDDBDD
BDD
 
3 средства автоматизации проектирования корпоративных приложений
3 средства автоматизации проектирования корпоративных приложений3 средства автоматизации проектирования корпоративных приложений
3 средства автоматизации проектирования корпоративных приложений
 
Унификация взаимодействия
Унификация взаимодействияУнификация взаимодействия
Унификация взаимодействия
 
Никита Ефимов Lead UX Architect, New Cloud Technologies
Никита Ефимов Lead UX Architect, New Cloud Technologies Никита Ефимов Lead UX Architect, New Cloud Technologies
Никита Ефимов Lead UX Architect, New Cloud Technologies
 
C++ осень 2012 лекция 7
C++ осень 2012 лекция 7C++ осень 2012 лекция 7
C++ осень 2012 лекция 7
 
А.Левенчук -- Будущее проектирования
А.Левенчук -- Будущее проектированияА.Левенчук -- Будущее проектирования
А.Левенчук -- Будущее проектирования
 
Разработчик, аналитик, заказчик — как найти общий язык?
Разработчик, аналитик, заказчик — как найти общий язык?Разработчик, аналитик, заказчик — как найти общий язык?
Разработчик, аналитик, заказчик — как найти общий язык?
 
OO Design with C++: 0. Intro
OO Design with C++: 0. IntroOO Design with C++: 0. Intro
OO Design with C++: 0. Intro
 
документирование долгоживущих веб проектов. г. белогорцев. зал 3
документирование долгоживущих веб проектов. г. белогорцев. зал 3документирование долгоживущих веб проектов. г. белогорцев. зал 3
документирование долгоживущих веб проектов. г. белогорцев. зал 3
 
Понятия технологии разработки объектно-ориентированных информационных систем ...
Понятия технологии разработки объектно-ориентированных информационных систем ...Понятия технологии разработки объектно-ориентированных информационных систем ...
Понятия технологии разработки объектно-ориентированных информационных систем ...
 
Разработка требований и Проектирование интерфейсов
Разработка требований и Проектирование интерфейсовРазработка требований и Проектирование интерфейсов
Разработка требований и Проектирование интерфейсов
 
METRO. Дизайн для Windows Phone
METRO. Дизайн для Windows PhoneMETRO. Дизайн для Windows Phone
METRO. Дизайн для Windows Phone
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)
 
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
 

More from Andrey Bibichev

Geeks vs Managers (part 2)
Geeks vs Managers (part 2)Geeks vs Managers (part 2)
Geeks vs Managers (part 2)Andrey Bibichev
 
Быстрое введение в TDD от А до Я
Быстрое введение в TDD от А до ЯБыстрое введение в TDD от А до Я
Быстрое введение в TDD от А до ЯAndrey Bibichev
 
Фрактальная природа IT-проектов (блиц)
Фрактальная природа IT-проектов (блиц)Фрактальная природа IT-проектов (блиц)
Фрактальная природа IT-проектов (блиц)Andrey Bibichev
 
Usability-for-programmers
Usability-for-programmersUsability-for-programmers
Usability-for-programmersAndrey Bibichev
 
Natural User Interface (WUDRU-2011)
Natural User Interface (WUDRU-2011)Natural User Interface (WUDRU-2011)
Natural User Interface (WUDRU-2011)Andrey Bibichev
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьAndrey Bibichev
 
Пользовательский автоматизм
Пользовательский автоматизмПользовательский автоматизм
Пользовательский автоматизмAndrey Bibichev
 
О текстовом вводе замолвите слово
О текстовом вводе замолвите словоО текстовом вводе замолвите слово
О текстовом вводе замолвите словоAndrey Bibichev
 
Проектирование больших ИС в Agile (статья)
Проектирование больших ИС в Agile (статья)Проектирование больших ИС в Agile (статья)
Проектирование больших ИС в Agile (статья)Andrey Bibichev
 
Проектирование больших ИС в Agile
Проектирование больших ИС в AgileПроектирование больших ИС в Agile
Проектирование больших ИС в AgileAndrey Bibichev
 
Enterprise Level Agile The Art Of Start
Enterprise Level Agile   The Art Of StartEnterprise Level Agile   The Art Of Start
Enterprise Level Agile The Art Of StartAndrey Bibichev
 
Humane Interface (Гуманный интерфейс)
Humane Interface (Гуманный интерфейс)Humane Interface (Гуманный интерфейс)
Humane Interface (Гуманный интерфейс)Andrey Bibichev
 
Безудержный рефакторинг: как не убиться об стену
Безудержный рефакторинг: как не убиться об стенуБезудержный рефакторинг: как не убиться об стену
Безудержный рефакторинг: как не убиться об стенуAndrey Bibichev
 
Практика внедрения Scrum (статья)
Практика внедрения Scrum (статья)Практика внедрения Scrum (статья)
Практика внедрения Scrum (статья)Andrey Bibichev
 

More from Andrey Bibichev (20)

Geeks vs Managers (part 2)
Geeks vs Managers (part 2)Geeks vs Managers (part 2)
Geeks vs Managers (part 2)
 
Быстрое введение в TDD от А до Я
Быстрое введение в TDD от А до ЯБыстрое введение в TDD от А до Я
Быстрое введение в TDD от А до Я
 
Фрактальная природа IT-проектов (блиц)
Фрактальная природа IT-проектов (блиц)Фрактальная природа IT-проектов (блиц)
Фрактальная природа IT-проектов (блиц)
 
Usability-for-programmers
Usability-for-programmersUsability-for-programmers
Usability-for-programmers
 
Geeks vs Managers
Geeks vs ManagersGeeks vs Managers
Geeks vs Managers
 
Tdd and decomposition
Tdd and decompositionTdd and decomposition
Tdd and decomposition
 
Mockist vs Classicist
Mockist vs ClassicistMockist vs Classicist
Mockist vs Classicist
 
Natural User Interface (WUDRU-2011)
Natural User Interface (WUDRU-2011)Natural User Interface (WUDRU-2011)
Natural User Interface (WUDRU-2011)
 
Puasson burning
Puasson burningPuasson burning
Puasson burning
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связность
 
Пользовательский автоматизм
Пользовательский автоматизмПользовательский автоматизм
Пользовательский автоматизм
 
Augmented Reality
Augmented RealityAugmented Reality
Augmented Reality
 
Agile: Think different
Agile: Think differentAgile: Think different
Agile: Think different
 
О текстовом вводе замолвите слово
О текстовом вводе замолвите словоО текстовом вводе замолвите слово
О текстовом вводе замолвите слово
 
Проектирование больших ИС в Agile (статья)
Проектирование больших ИС в Agile (статья)Проектирование больших ИС в Agile (статья)
Проектирование больших ИС в Agile (статья)
 
Проектирование больших ИС в Agile
Проектирование больших ИС в AgileПроектирование больших ИС в Agile
Проектирование больших ИС в Agile
 
Enterprise Level Agile The Art Of Start
Enterprise Level Agile   The Art Of StartEnterprise Level Agile   The Art Of Start
Enterprise Level Agile The Art Of Start
 
Humane Interface (Гуманный интерфейс)
Humane Interface (Гуманный интерфейс)Humane Interface (Гуманный интерфейс)
Humane Interface (Гуманный интерфейс)
 
Безудержный рефакторинг: как не убиться об стену
Безудержный рефакторинг: как не убиться об стенуБезудержный рефакторинг: как не убиться об стену
Безудержный рефакторинг: как не убиться об стену
 
Практика внедрения Scrum (статья)
Практика внедрения Scrum (статья)Практика внедрения Scrum (статья)
Практика внедрения Scrum (статья)
 

DDD Workshop

  • 1. DDD workshop for Java developers Бибичев Андрей январь 2010 г.
  • 2. I. Вводная xDD / История DDD / Domain Model
  • 3.
  • 4. ДЮДЮКИ: Самая известная TDD Test-Driven Development практика Нынче очень модное направление проектирования DDD Сменщик Domain-Driven Design BDD TDD Behaviour-Driven Development Одна из самых навороченных FDD Agile-методологий VDD Как затуманить заказчику мозги Feature-Driven Development Value-Driven Development
  • 6. История 2004 год Eric Evans «Domain-Driven Design - Tackling Complexity in the Heart of Software»
  • 7.
  • 9. Domain (словарь) • наследственная собственность; имение, поместье; земли; владение e.g. DNS • территория, зона, область, район (отмеченные некоторыми физическими особенностями) • сфера (интересов), поле (деятельности), область (знаний) В данном случае этот смысл • область определения (мат.) Домен поля таблицы в БД
  • 10. Т.е. это о Business Domain Предметной области и Business Logic Бизнес-логики
  • 11. «Attention was diverted away from rich logic and deep solutions, because there was so much value in just getting data onto the web, along with very simple behavior. But now that basic level of web usage has largely been assimilated, and projects are starting to get more ambitious again about business logic.»
  • 12. Центральная роль в мышлении, проектировании, реализации DDD
  • 13. Пример: есть сайт конференции, надо сделать голосование за доклад
  • 14. О чем вы прежде всего начнете думать? 
  • 15. О чем вы прежде всего начнете думать? votes 
  • 16. О чем вы прежде всего начнете думать? 
  • 17. О чем вы прежде всего начнете думать? 
  • 18. /
  • 19. История из жизни или «Когда я был маленьким …»
  • 21. II. Моделирование Модель / Элементы UML / Пример / Интерактивный практикум
  • 22.
  • 23. Модель – это упрощенное Простота != Примитивность приближение реальности. Максимально простое, при условии достаточной близости к действительности.
  • 24. Нам это знакомо со школы
  • 29. В физике в качестве формализма для моделей используют мат.аппарат, а в программировании уже лет 20 – ООП:
  • 31. А в качестве граф. нотации – UML в режиме эскизного проектирования:
  • 32. Графическая нотация ЭСКИЗИРОВАНИЕ (набросок от руки) Способы Проектирование использования (чертеж) UML Метамодель Программирование (граф.представление кода) Executable UML, MDA, PIM
  • 33. /
  • 34.
  • 35. Модель предметной области; Модель программы; Словарь терминов Понимание чужого кода Системная Бизнес-анализ архитектура (анализ требований) (проектирование) Документирование Понятия из Представление конструкций языка. предметной области Ограничения по приемам проектирования Движение слева направо по мере уточнения, детализации и реализации
  • 36. Нюансы терминологии:  Класс  Сущность (class) (entity)  Наследование  Обобщение (inheritance) (generalization) Функциональность  Свойство  Атрибут (feature) (property) (attribute)  Метод  Операция (method) (operation)  Ссылка, связь  Ассоциация (reference, link) (association) ПО Предметная область
  • 39. • Эксперт: Есть аэропорты. Для каждого известны: название на местом языке, уникальный латинский код и GPS-координаты. • Мы:
  • 40. • Эксперт: Аэропорты расположены в городах. Для каждого города известно его название (на местном и англ. языках). Причем известно расстояние от аэропорта до центра города, к которому он «приписан». • Мы:
  • 41. • Эксперт: Для каждого города есть информация о стране, в которой он находится. • Мы:
  • 42. Шаг 4 • Есть информация по рейсам самолетов: номер рейса (уникален), аэропорты вылета и прилета • Время вылета по местному времени города, из которого производится вылет • Время прилета по местному времени города, из которого производится вылет
  • 43.
  • 44. Шаг 5 • Можно ли реализовать вычислимые атрибуты: – Время вылета по гринвичу – Время прилета по гринвичу – Время в пути • Если нет, то чего для этого не хватает (добавьте это на диаграмму вместе с вычислимыми атрибутами)
  • 45.
  • 46. Шаг 6 • Рейсы делятся на регулярные и чартерные • Для регулярных рейсов известно расписание их полетов в днях недели (по каким дням недели осуществляется рейс) • Для чартерных рейсов расписание задается как просто конкретные даты, по которым выполняется рейс
  • 47.
  • 48. Шаг 7 • Для всех рейсов есть информация по модели самолета, на которой осуществляется перелет, со следующими характеристиками: – Название модели – Количество мест эконом-класса – Количество мест бизнес-класса – Наличие курящего салона и количество мест в нём
  • 49. Шаг 8 • Кроме того, для всех рейсов известна компания- перевозчик • А у каждого перевозчика есть свой набор тарифов, каждый из которых определяет: – Цену билета на соответствующий вид места (бизнес- класс, эконом-класс, курящий салон) – Причем цена зависит от степени наполнения самолета (в каком диапазоне лежит количество проданных билетов на данный вид мест) • Тарифы действуют определенный промежуток времени • Для рейса известен тариф, по которому продаются билеты в настоящее время
  • 50. Шаг 9 • В системе есть информация по наличию свободных мест (для каждого класса) с учетом возможной брони • Причем необходимо показывать текущую цену, по которой в данный момент продаются билеты заданного класса на данный рейс (на дату)
  • 51. Шаг 10 • Дальше можно вспомнить что еще бывают всякие скидки, детские билеты, перенос рейсов, отмена и т.д. • НО МЫ ЭТОГО ДЕЛАТЬ НЕ БУДЕМ 
  • 52.
  • 55. 
  • 57.
  • 58. Feature-Driven Development (FDD): Разработка Составление Планирование общей модели списка функций Список функций План разработки (Feature list) (A development plan) 1 – 3 недели Design by Build by feature Диаграмма классов feature предметной области Отгрузка!
  • 59. История из жизни или «Когда я был маленьким …»
  • 60. III. Реализация в коде Шаблоны / Варианты архитектур / Распределенные дилеммы
  • 61. СУБД  Модель  ОО-язык таблица сущность класс поле атрибут свойство FK cвязь ссылка хранимая действие метод процедура
  • 62.
  • 63.
  • 64.
  • 65. Идентификация: - два объекта, один и тот же аэропорт Жизненный цикл объекта: - создание /модификация / удаление Создание Отражение в Чтение из хранилище Модификация хранилища Удаление из хранилища
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76. Базовые классы – опционально! Альтернатива: интерфейс.
  • 77.
  • 79. Value object • Неизменность объекта (Immutable) – можно безопасно передавать • Сравнение объектов = сравнение данных – позволяет распознавать одинаковые значения, представленные в виде разных объектов • Инкапсулирует проверку корректности значения – «Build-in anticorruption layer» • Обеспечивает строгую типизацию – случайно не передашь Code вместо Name и наоборот
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87. Mapping этого хозяйства на БД AIRPORTS CODE (PK) NAME LATITUDE LONGITUDE DME Домодедово 12345 67890
  • 88.  
  • 89.
  • 90. TARIFFS ID (PK) NAME … TARIFF_ITEMS TARIFF_ID (FK) SEAT_KIND PRICE 12345 Эконом 100 12345 Любимый 12345 Бизнес 1000 12345 Стоя 10
  • 91.   
  • 92. Задача Во многих местах логики и тестов создавать рейс по: • Код аэропорта Откуда • Код аэропорта Куда • UN модели самолета • ИНН компании перевозчика
  • 93.
  • 95. Сервисы • Уровня доменной модели (Domain Servicies) – Инфраструктурные (API к системе сообщений, API для интеграции с внешними системами, …) – Согласованная работа с несколькими объектами («уволить всех сотрудников на заданную букву», …) – Комбинированная алгоритмика (прокладка маршрутов, подбор оптимальных вариантов, …) • Уровня приложения (Application Servicies) – чуть позже
  • 96.
  • 97.      !!! Используете ORM => У вас DDD
  • 98. Но ORM может сильно облегчить работу: + возня с value-типами + возня с агрегатами
  • 99. Дополнительные полезные шаблоны 1. Specification – http://www.martinfowler.com/apsupp/spec.pdf 2. DomainEvent – http://martinfowler.com/eaaDev/DomainEvent.html 3. NullObject – http://www.owlnet.rice.edu/~comp212/00- spring/handouts/week06/null_object_revisited.htm 4. Builder – http://www.ddj.com/java/208403883?pgno=2
  • 102. UI (User Interface): the easiest to understand, this layer is the responsible of displaying information to the user, and accept new data. It could be implemented for web, desktop, or any presentation technology, present or future. For example, it could be a voice application, that interacts with the user via a phone. The acid test for our design is that a radical change in user interface should have minimal (or controlled, at least) impact in the rest of the system.
  • 103. Application Layer: it’s in charge of coordinating the actions to be performed on the domain. There are no business rules or domain knowledge here. No business state resides in this layer. It delegates all domain actions to the domain. It could coordinate many actions (possibly in many domains). It could prepare the infrastructure to be ready to work with the domain for an specific action (for example, preparing transaction scopes).
  • 104. Domain Layer: In this layer resides the heart of software, according to Evans. Business rules and logic lives inside this layer. Business entity state and behavior is defined and used here. Communication with other systems, persistence details, are forwarded to the infrastruсture layer. Patterns: Entities, Value Objects, Services, Repositories and Factories.
  • 105. Infrastructure Layer: God and devil are in the details, and in the infrastructure layer. Its main responsability is the persistence of the business state, most frequently, using a relational database. The infrastructure consists of everything that exists independently of our application: external libraries, database engine, application server, messaging backend and so on.
  • 106. Обратите внимание, на направление зависимостей и наследования
  • 108. Interface: This layer holds everything that interacts with other systems, such as web services, RMI interfaces or web applications, and batch processing frontends. It handles interpretation, validation and translation of incoming data. It also handles serialization of outgoing data, such as HTML or XML across HTTP to web browsers or web service clients, or DTO classes and distributed facade interfaces for remote Java clients.
  • 109. Infrastructure: Infrastructure consists of everything that exists independently of our application: external libraries, database engine, application server, messaging backend and so on. Also, we consider code and configuration files that glues the other layers to the infrastructure as part of the infrastructure layer. Looking for example at the persistence aspect, the database schema definition, Hibernate configuration and mapping files and implementations of the repository interfaces are part of the infrastructure layer.
  • 110. Infrastructure Application Framework Model ? Domain Persistance
  • 111. Rich Pure Domain Model Domain Model Model Model IoC Persistance Persistance
  • 112. Model Domain Model Airport AirportRepository Mapping Metadata Rich Persistance EnityBase RepositoryBase Utils
  • 113. Model Airport AirportRepository Domain Model Pure «depends» «implement» Persistance Mapping AirportRepository Utils Metadata Impl
  • 114. A Pure Object-oriented Domain Model by a DB Guy http://www.devx.com/vb2themax/Article/19892/0/page/1 http://www.devx.com/vb2themax/Article/19892/0/page/2 http://www.devx.com/vb2themax/Article/19892/0/page/3 http://www.devx.com/vb2themax/Article/19892/0/page/4
  • 115. А еще есть (анти?)паттерн Anemic Domain Model http://www.martinfowler.com/bliki/AnemicDomainModel.html • Набор getter-ов и setter-ов == Typed Record • Вся логика в сервисах в процедурном стиле
  • 116. В каких из сервисов?  
  • 117. Постоянно себя спрашивайте: можно ли, используя public API доменной модели, нарушить целостность, согласованность и консистентность данных?
  • 119. Pure Rich Anemic
  • 120. Unit of work Explicit Active state Record transition
  • 121.
  • 123. Simple Reference Lazy Load Value of Reference FK
  • 124. Happy Day Optimistic Pessimistic Locking Locking
  • 125. IV. Заключение Размер моделей/ Современные тенденции / Литература
  • 127. По идее, всё нацелено на достаточно сложные модели: Но на практике эффективно используется и для несложных предметных областей
  • 132. Хоцца «аналогов» SQL и xxxMyAdmin но для компонентов DomainModel, а не СУБД
  • 133. Метаданные и метамодель
  • 134.
  • 136. Литература & Ресурсы
  • 137.
  • 138. http://www.infoq.com/news/2006/12/ domain-driven-design
  • 139.
  • 140.
  • 145. Спасибо за внимание! biBIGone@gmail.com http://www.google.com/profiles/biBIGone