41
Domain Driven Design. Как писать простой код для сложных систем? Дмитрий Павлов Антон Бевзюк SmartStepGroup

Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

Embed Size (px)

Citation preview

Page 1: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

Domain Driven Design.Как писать простой код для сложных систем?Дмитрий ПавловАнтон Бевзюк

SmartStepGroup

Page 2: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

SmartStepGroupВнедряем инженерные практики XPСтавим процессы

Page 3: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

Domain Driven Design

Page 4: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

DDDUbiquitous Language

BoundedContext

Page 5: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?
Page 6: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

PersistanseIgnorance

Page 7: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

Ubiquitous Language

Page 8: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

Когда покупатель оплатил заказ,

мы отправим ему email с

подтверждением

Page 9: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

UPDATE tbl_userSET status = 18WHERE type = 3 AND id = …

Page 10: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?
Page 11: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

Ubiquitous LanguageDeleteAllLines CancelOrder

SetStatus(Status.Approved)

Approve

CreateUser EnrollCustomer

Customer.Address = new Address()

Customer.RelocateTo(new Address())

Page 12: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

https://bitbucket.org/smartstepgroup/agileshop

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. Как писать простой код для сложных систем?
Page 20: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?
Page 21: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?
Page 22: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?
Page 23: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?
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. Как писать простой код для сложных систем?

Bounded Context

Page 29: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?
Page 30: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?
Page 31: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?
Page 32: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?
Page 33: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?
Page 34: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

Context Map

Page 35: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

Не все большие системы будут

хорошо спроектированы

http://www.laputan.org/mud

Page 36: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

Продажа

conforms

Отчеты

Page 37: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

Продажа

partners

conforms

Отчеты

Поставка

Page 38: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

Продажа

partners

conforms

Производство

Отчеты

Поставка

ACL

ACL

Page 39: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

Борьба со сложностьюДоменная модель != Объектная модельВездесущий языкДомены и поддомены вместо единой моделиContext Map

Page 40: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

СсылкиТренинг SmartStepGroup по DDDhttp://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215 DDD misconceptions - Dino Esposito (SA2014)How You Can Architect and Develop Enterprise Mission-Critical Applications with Domain-Driven Design - Vaughn VernonEric Evans: What I've learned about DDD since the book was publishedDDD & Microservices: At Last, Some Boundaries! • Eric EvansPluralsight - Domain-Driven Design in Practice - Vladimir Khorikov

Page 41: Дмитрий Павлов, Антон Бевзюк, Domain Driven Design. Как писать простой код для сложных систем?

Спасибо за внимание!Дмитрий Павлов[email protected]Антон Бевзюк[email protected]

www.smartstepgroup.comblog.smartstepgroup.comtwitter.com/SmartStepGroup