DDD Workshop
Upcoming SlideShare
Loading in...5
×
 

DDD Workshop

on

  • 10,852 views

Слайды к воркшопу "Domain-Driven Design for Java Developers", прочитанному на конференции AgileBaseCamp, прошедшей в Киеве в январе 2010 ...

Слайды к воркшопу "Domain-Driven Design for Java Developers", прочитанному на конференции AgileBaseCamp, прошедшей в Киеве в январе 2010 г.

Statistics

Views

Total Views
10,852
Views on SlideShare
8,652
Embed Views
2,200

Actions

Likes
19
Downloads
182
Comments
0

14 Embeds 2,200

http://lib.custis.ru 1600
http://addconf.ru 242
http://team.custis.ru 165
http://www.addconf.ru 96
http://www.slideshare.net 27
http://wiki.office.custis.ru 21
http://agilebasecamp.org 19
http://feeds.office.custis.ru 14
http://0xff0000.blogspot.com 7
http://a0.twimg.com 3
https://jujo00obo2o234ungd3t8qjfcjrs3o6k-a-sites-opensocial.googleusercontent.com 2
http://add4.addconf.ru 2
http://xss.yandex.net 1
http://siel 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

DDD Workshop DDD Workshop Presentation Transcript

  • 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