60
DCI @ XING масштабируя бизнес-логику Борис Тверитнев

DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

  • Upload
    ontico

  • View
    244

  • Download
    5

Embed Size (px)

Citation preview

Page 1: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

DCI @ XINGмасштабируя бизнес-логикуБорис Тверитнев

Page 2: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

План

Какую проблему решает DCI?Что такое DCI?Место DCI в цикле разработкиВыводы

Борис Тверитнев/Highload++ 205/02/2023

Page 3: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 3

Часть 1Проблема

Ы05/02/2023

Page 4: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 4

“MVC was conceived as a general solution to the problem of users controlling a large and complex data set [model]”Trygve Reenskaug

05/02/2023

Page 5: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Манипуляции

Борис Тверитнев/Highload++ 505/02/2023

Page 6: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 6

ООП

05/02/2023

Page 7: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 7

“I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages”Alan Kay05/02/2023

Page 8: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 8

Bild auf Platzhalter ziehen oder durch Klicken auf Symbol hinzufügen

Что-то пошло не так

1967 – Simula1980 – Smalltalk1983 – C++1995 – Java2000 – C#

05/02/2023

Page 9: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 9

“I made up the term 'object-oriented', and I can tell you I didn't have C++ in mind”Alan Kay, OOPSLA, 1997

05/02/2023

Page 10: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 10

Проблемы с ООП

• Нет инструментов для четкой локализации алгоритмов системы

• Глядя на классы, невозможно объяснить поведение объектов

05/02/2023

Page 11: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

11

Пример

Борис Тверитнев/Highload++05/02/2023

Page 12: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 1205/02/2023

Page 13: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Модель предметной области

ONLINE OFFLINE IN-APP

BONUS

B2B customers

B2C customers

Pay UsePayUsePay Pay Pay PayPay More

Pay More Bonus

Борис Тверитнев/Highload++ 1305/02/2023

Page 14: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Модель предметной области

B2B customers

B2C customers

Борис Тверитнев/Highload++ 1405/02/2023

Page 15: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 1505/02/2023

DCI @ XING // Boris Tveritnev // Hamburg on Ruby

Page 16: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 1605/02/2023

Page 17: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 1705/02/2023

Page 18: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 18

Часть 2DCI

05/02/2023

Page 19: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 19

Код строится подобно работе мозга

05/02/2023

Page 20: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 20

DCI

05/02/2023

• Data – медленно изменяющаяся (статическая) часть системы

• Interaction – бизнес-логика, подверженная частым изменениям (динамическая) часть системы

• Context – сценарий, где взаимодействующие объекты оперируют данными

Page 21: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 21

Неизменяющаяся часть системы

05/02/2023

Page 22: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 22

Данные

05/02/2023

• Данные описывают статическую систему (форму)

• Простые DTO

Page 23: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 2305/02/2023

Page 24: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 24

Часто меняющаяся часть системы

05/02/2023

Page 25: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 25

Роли

05/02/2023

• Описывают динамическое поведение системы

• Алгоритмы без состояния• Работают с данными известной

“формы”

Page 26: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 26

Роли и закон Conway, внезапно

05/02/2023

• Customer – Sales• Debtor – Accounting• Employer – BizDev• SupportCustomer – UserCare

Page 27: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 2705/02/2023

Page 28: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 28

Сценарий – место, где данные оживают

05/02/2023

Page 29: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 29

Контекст

05/02/2023

• Место, где объектам с данными назначаются роли, которые они будут исполнять

• Отражение пользовательского сценария в исходном коде

Page 30: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 3005/02/2023

Page 31: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Говорящие имена контекстов

05/02/2023Борис Тверитнев/Highload++ 31

Имя сценария + суффикс:• Command – синхронный

request/response сценарий• Policy – асинхронный publish/subscribe

сценарий

Page 32: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 32

Пример

05/02/2023

Page 33: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Модель предметной области

B2B customers

B2C customers

Борис Тверитнев/Highload++ 3305/02/2023

Page 34: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 3405/02/2023

Page 35: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 3505/02/2023

Page 36: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 3605/02/2023

Page 37: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 3705/02/2023

Page 38: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 3805/02/2023

Page 39: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 39

Часть 3Цикл разработки

05/02/2023

Page 40: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 40

DCI + DDD

05/02/2023

Page 41: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 41

Доменные события

05/02/2023

• DCI контекст – это транзакция события – результат

• События разрывают зависимость между бизнес-логикой и инфраструктурой

Page 42: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 4205/02/2023

Page 43: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 4305/02/2023

Page 44: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 44

Агрегат

05/02/2023

• Корневой объект агрегата проверяет все инварианты

• Правильно обозначить границы агрегата довольно сложно

Page 45: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 4505/02/2023

Page 46: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

05/02/2023Борис Тверитнев/Highload++ 46

Page 47: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 47

DCI + TDD

05/02/2023

Page 48: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 48

TDD без трения

05/02/2023

• Тесты организованы в терминах DCI

• Позволяет рефакторить код, не ломая тесты

• Исполняемая и верифицируемая документация

Page 49: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 4905/02/2023

Page 50: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 5005/02/2023

Page 51: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 51

DCI + другие ООП языки!Ruby

05/02/2023

Page 52: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 5205/02/2023

http://www.horsdal-consult.dk/2010/12/options-for-dci-on-net.html

Page 53: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 5305/02/2023

http://fulloo.info/Examples/Marvin/MoneyTransfer/Listings/MoneyTransfer/

Page 54: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 5405/02/2023

https://github.com/apache/zest-java/blob/develop/samples/dci/src/main/java/org/apache/zest/dci/moneytransfer/context/TransferMoneyContext2.java

Page 55: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 5505/02/2023

https://github.com/DCI/scaladci-demo/blob/master/demo/src/main/scala/MoneyTransferApp.scala

Page 56: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 56

DCI в популярных ОО языках• C#: dynamic• Marvin: .Net CLI compatible language, DCI DSL• Java: Apache Zest (former Qi4J)• Scala: DSL compiler plugin + macros• Javascript: hasOwnProperty and apply,

javascript-dci• C++: with Templates

05/02/2023

Page 57: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 57

Часть 4Выводы

05/02/2023

Page 58: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 58

Выводы

05/02/2023

• DCI локализует часто меняющуюся бизнес-логику

• Помогает в DDD• DCI и DDD не нужны в

‘CRUD’ приложениях• Упрощает TDD

Page 59: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

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

www.xing.com

Page 60: DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)

Борис Тверитнев/Highload++ 60

Полезные материалы1. http://www.artima.com/articles/dci_vision.html2. DCI Glossary: http://folk.uio.no/trygver/2011/DCI-Glossary.pdf 3. http://fulloo.info/4. https://groups.google.com/forum/#!forum/object-composition5. Lean Architecture: for Agile Software Development, J. Coplien, G. Bjørnvig, ISBN-13: 978-

0470684207, Wiley, 2010.6. A Personal Computer for Children of All Ages: http://www.mprove.de/diplom/gui/Kay72a.pdf 7. Dr. Alan Kay on the Meaning of “Object-Oriented Programming”:

http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en 8. http://www.slideshare.net/c_horsdal/dci-anug-24th-november-20109. NDC 2012, T. Reenskaug - Object Orientation Revisited: https://vimeo.com/43536416

05/02/2023