37
Domain Driven Design. Строительные блоки, цемент и кирпичи Антон Бевзюк Матвей Григорьев Додо Пицца

Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Embed Size (px)

Citation preview

Page 1: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Domain Driven Design.Строительные блоки, цемент и

кирпичи

Антон БевзюкМатвей Григорьев

Додо Пицца

Page 2: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

ДоДо = IT компания

Page 3: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Domain Driven Design

Page 4: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

DDD - продолжение

https://www.youtube.com/watch?v=SpLJq7OAIQ0

Page 5: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

DDD

Ubiquitous Language

BoundedContext

Page 6: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

DDD

Ubiquitous Language

BoundedContext

Тактическийдизайн

Page 7: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Ubiquitous Language

Уникальная платформа для обмена опытом в Agile и Lean: как быловнедрение, какие проблемы и как им удалось бороться, какзаинтересованные сотрудники и боролись с скептиками.

Конференция будет полезна как динамично развивающийся гуру, таки новички: руководители компаний и руководители проектов, мастера спамеров и владельцы продуктов, разработчики и аналитики, а также все, кто заинтересован в улучшении процессов разработки в вашей компании.

Уникальная площадка для обмена опытом в Agile и Lean: как проходиловнедрение, какие были проблемы и как с ними получалось бороться, как заинтересовывали сотрудников и боролись со скептиками.

Конференция будет полезна как гуру в agile, так и новичкам: руководителям компаний и менеджерам проектов, скрам-мастерам и владельцам продуктов, разработчикам и аналитикам, а также всем, ктозаинтересован в совершенствовании процессов разработки в своейкомпании.

Page 8: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи
Page 9: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи
Page 10: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Сущность (Entity)

• Уникальный Id• Иногда сложный

• «Что»

• Состояние может меняться

• Важно отличать, даже если похожи

Page 11: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Сущность (Entity)

Page 12: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Объект-значение (Value Object)

• «Какой»

• Набор атрибутов

• Неизменяемый (immutable)• Нет побочных эффектов

• Может содержать логику

Page 13: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи
Page 14: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи
Page 15: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи
Page 16: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи
Page 17: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи
Page 18: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи
Page 19: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Product

Product

Id

ImageUrl

Variations

Витрина

Product

Id

Title

Price

Quantity

Cost

Корзина

Commodity

Id

Title

Price

Quantity

Tax

Amount

Оплата

DeliveryItem

Id

Title

Quantity

Доставка

ProductVariation

Id

Title

Price

*

Page 20: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Сложность. Bounded Context

Page 21: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи
Page 22: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Агрегат

• Кластер связанных объектов

• Aggregate root = Entity

• Инвариант

• Удаляется целиком

• Состоит из Entity, Value Object• Локальные Id

• Можно ссылаться на другие агрегаты

Page 23: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

ACID

•Atomic — Атомарный

•Consistent — Согласованный

•Isolated — Изолированный

•Durable — Прочный

Page 24: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи
Page 25: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Фабрика

Page 26: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Фабрика

Page 27: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Фабрика

• Создание агрегата

• Обеспечивает валидность

Page 28: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Сервис

• Операции над сущностями

• Нет состояния

• Не путать с инфраструктурными сервсисами

• Работает с Entity, Value Object

Page 29: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи
Page 30: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Репозиторий

• Абстракция хранилища• Коллекция

• Язык запросов

• Скрывает техническую реализацию

• Generic<T> vs Custom

Page 31: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Generic Repository

Page 32: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Generic AggregateRoot Repository

Page 33: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи
Page 34: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Anemic Domain Model

vs

Rich Domain Model

Page 35: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

DDD != ООП

ООП

Event Sourcing

Функциональщина + Event Sourcing

Реляционная

Графы

Page 36: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

Ссылки

• Тренинг SmartStepGroup по DDD

• Domain-Driven Design: Tackling Complexity in the Heart of Software

• Implementing Domain-Driven Design

• Eric Evans: What I've learned about DDD since the book was published

• Pluralsight - Domain-Driven Design Fundamentals

• Domain-Driven Design Europe 2016

Page 37: Антон Бевзюк; Матвей Григорьев. Domain Driven Design: строительные блоки, цемент и кирпичи

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

• Антон Бевзюк[email protected]

• Матвей Григорьев[email protected]