ddd workshop

Post on 29-Nov-2014

11.112 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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»

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

Simple Reference

Value of FK

Lazy Load Reference

Happy

Day

Pessimistic Locking

Optimistic Locking

IV. ЗаключениеРазмер моделей/ Современные

тенденции / Литература

DDD дляпростых моделей

По идее, всё нацелено на достаточно сложные модели:

Но на практике эффективно используетсяи для несложных предметных областей

Современныетенденции

Хоцца «аналогов» SQL и xxxMyAdminно для компонентов DomainModel, а не СУБД

Метаданныеи

метамодель

DSL

Domain Specific Language

Литература&

Ресурсы

Спасибо за внимание!

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

top related