DDD Workshop
-
Upload
andrey-bibichev -
Category
Technology
-
view
11.096 -
download
4
description
Transcript of DDD Workshop
DDD workshopfor Java developers
Бибичев Андрейянварь 2010 г.
I. ВводнаяxDD / История DDD / Domain Model
ДЮДЮКИ:
TDD
DDDBDD
FDDVDD
Test-Driven Development
Domain-Driven Design
Behaviour-Driven Development
Feature-Driven Development
Value-Driven Development
Самая известнаяпрактика
Нынче очень модное направление проектирования
Сменщик TDD
Одна из самых навороченных
Agile-методологий Как затуманить заказчику мозги
DDDDomain-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 beenassimilated, 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)
Наследование(inheritance)
Свойство(property)
Метод(method)
Ссылка, связь(reference, link)
Сущность(entity)
Обобщение(generalization)
Атрибут(attribute)
Операция(operation)
Ассоциация(association)
Фун
кцио
нальн
ость
(fea
ture
)
ПО Предметнаяобласть
Нюансы терминологии:
Упражнение 1(разминка)
Система продажи
билетов на самолет
•Эксперт: Есть аэропорты. Для каждого известны:название на местом языке,уникальный латинский коди GPS-координаты.
•Мы:
•Эксперт: Аэропорты расположены в городах.Для каждого города известно егоназвание (на местном и англ. языках). Причем известно расстояние от аэропортадо центра города, к которому он «приписан».
•Мы:
•Эксперт: Для каждого города есть информацияо стране, в которой он находится.
•Мы:
Шаг 4
• Есть информация по рейсам самолетов: номер рейса (уникален), аэропорты вылета и прилета
• Время вылета по местному времени города, из которого производится вылет
• Время прилета по местному времени города, из которого производится вылет
Шаг 5
• Можно ли реализовать вычислимые атрибуты:
– Время вылета по гринвичу
– Время прилета по гринвичу
– Время в пути
• Если нет, то чего для этого не хватает (добавьте это на диаграмму вместе с вычислимыми атрибутами)
Шаг 6
• Рейсы делятся на регулярные и чартерные
• Для регулярных рейсов известно расписание их полетов в днях недели (по каким дням недели осуществляется рейс)
• Для чартерных рейсов расписание задается как просто конкретные даты, по которым выполняется рейс
Шаг 7
• Для всех рейсов есть информация по модели самолета, на которой осуществляется перелет, со следующими характеристиками:
– Название модели
– Количество мест эконом-класса
– Количество мест бизнес-класса
– Наличие курящего салона и количество мест в нём
Шаг 8
• Кроме того, для всех рейсов известна компания-перевозчик
• А у каждого перевозчика есть свой набор тарифов, каждый из которых определяет:– Цену билета на соответствующий вид места (бизнес-
класс, эконом-класс, курящий салон)– Причем цена зависит от степени наполнения самолета
(в каком диапазоне лежит количество проданных билетов на данный вид мест)
• Тарифы действуют определенный промежуток времени
• Для рейса известен тариф, по которому продаются билеты в настоящее время
Шаг 9
• В системе есть информация по наличию свободных мест (для каждого класса) с учетом возможной брони
• Причем необходимо показывать текущую цену, по которой в данный момент продаются билеты заданного класса на данный рейс (на дату)
Шаг 10
• Дальше можно вспомнить что еще бывают всякие скидки, детские билеты, перенос рейсов, отмена и т.д.
• НО МЫ ЭТОГО ДЕЛАТЬ НЕ БУДЕМ
А где методы?
Упражнение 2(интерактив)
Итого
Feature-Driven Development (FDD):
Разработка общей модели
Составление списка функций
Планирование
Build by featureDesign by feature
Список функций(Feature list)
План разработки(A development plan)
Диаграмма классовпредметной области
Отгрузка!
1 – 3 недели
История из жизни или«Когда я был маленьким …»
III. Реализация в коде
Шаблоны / Варианты архитектур / Распределенные дилеммы
СУБД Модель ОО-язык
таблица сущность класс
поле атрибут свойство
FK cвязь ссылка
хранимаяпроцедура
действие метод
Идентификация:- два объекта, один и тот же аэропорт
Жизненный цикл объекта:- создание /модификация / удаление
СозданиеОтражение в хранилище
Модификация
Удаление из хранилища
Чтение из хранилища
Базовые классы – опционально!Альтернатива: интерфейс.
Самый известный
Value-object
Value object
• Неизменность объекта (Immutable)– можно безопасно передавать
• Сравнение объектов = сравнение данных– позволяет распознавать одинаковые значения,
представленные в виде разных объектов
• Инкапсулирует проверку корректности значения– «Build-in anticorruption layer»
• Обеспечивает строгую типизацию– случайно не передашь Code вместо Name и наоборот
Mapping этого хозяйства на БД
CODE (PK) NAME LATITUDE LONGITUDE
DME Домодедово 12345 67890
AIRPORTS
ID (PK) NAME …
12345 Любимый
TARIFFS
TARIFF_ID (FK) SEAT_KIND PRICE
12345 Эконом 100
12345 Бизнес 1000
12345 Стоя 10
TARIFF_ITEMS
ЗадачаВо многих местах логики и тестовсоздавать рейс по:• Код аэропорта Откуда• Код аэропорта Куда• UN модели самолета• ИНН компании перевозчика
Сервисы
• Уровня доменной модели (Domain Servicies)– Инфраструктурные (API к системе сообщений, API
для интеграции с внешними системами, …)
– Согласованная работа с несколькими объектами («уволить всех сотрудников на заданную букву», …)
– Комбинированная алгоритмика (прокладка маршрутов, подбор оптимальных вариантов, …)
• Уровня приложения (Application Servicies)– чуть позже
Используете ORM => У вас DDD!!!
+ возня с value-типами+ возня с агрегатами
Но ORM может сильно облегчить работу:
Дополнительные полезные шаблоны
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.
Persistance
Model
Infrastructure
Do
mai
nA
pp
licat
ion
?Framework
RichDomain Model
PureDomain Model
Persistance
Model
Persistance
Model
IoC
Model
Persistance
EnityBase RepositoryBase Utils
Airport AirportRepository Mapping
Metadata
Ric
hD
om
ain
Mo
del
Model
Persistance
AirportRepository
ImplUtils
Airport AirportRepository
Mapping
Metadata
«implement»«depends»
Pu
reD
om
ain
Mo
del
http://www.devx.com/vb2themax/Article/19892/0/page/1http://www.devx.com/vb2themax/Article/19892/0/page/2http://www.devx.com/vb2themax/Article/19892/0/page/3http://www.devx.com/vb2themax/Article/19892/0/page/4
A Pure Object-oriented Domain Model by a DB Guy
А еще есть(анти?)паттерн
Anemic Domain Model
http://www.martinfowler.com/bliki/AnemicDomainModel.html
• Набор getter-ов и setter-ов == Typed Record
• Вся логика в сервисах в процедурном стиле
В каких из сервисов?
Постоянно себя спрашивайте:можно ли, используя public API доменной
модели, нарушить целостность, согласованность и консистентность данных?
Распространенныедилеммы
Pure
AnemicRich
Unit of work
Explicit state
transition
Active Record
http://www.infoq.com/presentations/greg-young-unshackle-qcon08
Simple Reference
Value of FK
Lazy Load Reference
Happy
Day
Pessimistic Locking
Optimistic 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/
Спасибо за внимание!
[email protected]://www.google.com/profiles/biBIGone