Transcript
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


Recommended