Upload
ontico
View
244
Download
5
Embed Size (px)
Citation preview
DCI @ XINGмасштабируя бизнес-логикуБорис Тверитнев
План
Какую проблему решает DCI?Что такое DCI?Место DCI в цикле разработкиВыводы
Борис Тверитнев/Highload++ 205/02/2023
Борис Тверитнев/Highload++ 3
Часть 1Проблема
Ы05/02/2023
Борис Тверитнев/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
Манипуляции
Борис Тверитнев/Highload++ 505/02/2023
Борис Тверитнев/Highload++ 6
ООП
05/02/2023
Борис Тверитнев/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
Борис Тверитнев/Highload++ 8
Bild auf Platzhalter ziehen oder durch Klicken auf Symbol hinzufügen
Что-то пошло не так
1967 – Simula1980 – Smalltalk1983 – C++1995 – Java2000 – C#
05/02/2023
Борис Тверитнев/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
Борис Тверитнев/Highload++ 10
Проблемы с ООП
• Нет инструментов для четкой локализации алгоритмов системы
• Глядя на классы, невозможно объяснить поведение объектов
05/02/2023
11
Пример
Борис Тверитнев/Highload++05/02/2023
Борис Тверитнев/Highload++ 1205/02/2023
Модель предметной области
ONLINE OFFLINE IN-APP
BONUS
B2B customers
B2C customers
Pay UsePayUsePay Pay Pay PayPay More
Pay More Bonus
Борис Тверитнев/Highload++ 1305/02/2023
Модель предметной области
B2B customers
B2C customers
Борис Тверитнев/Highload++ 1405/02/2023
Борис Тверитнев/Highload++ 1505/02/2023
DCI @ XING // Boris Tveritnev // Hamburg on Ruby
Борис Тверитнев/Highload++ 1605/02/2023
Борис Тверитнев/Highload++ 1705/02/2023
Борис Тверитнев/Highload++ 18
Часть 2DCI
05/02/2023
Борис Тверитнев/Highload++ 19
Код строится подобно работе мозга
05/02/2023
Борис Тверитнев/Highload++ 20
DCI
05/02/2023
• Data – медленно изменяющаяся (статическая) часть системы
• Interaction – бизнес-логика, подверженная частым изменениям (динамическая) часть системы
• Context – сценарий, где взаимодействующие объекты оперируют данными
Борис Тверитнев/Highload++ 21
Неизменяющаяся часть системы
05/02/2023
Борис Тверитнев/Highload++ 22
Данные
05/02/2023
• Данные описывают статическую систему (форму)
• Простые DTO
Борис Тверитнев/Highload++ 2305/02/2023
Борис Тверитнев/Highload++ 24
Часто меняющаяся часть системы
05/02/2023
Борис Тверитнев/Highload++ 25
Роли
05/02/2023
• Описывают динамическое поведение системы
• Алгоритмы без состояния• Работают с данными известной
“формы”
Борис Тверитнев/Highload++ 26
Роли и закон Conway, внезапно
05/02/2023
• Customer – Sales• Debtor – Accounting• Employer – BizDev• SupportCustomer – UserCare
Борис Тверитнев/Highload++ 2705/02/2023
Борис Тверитнев/Highload++ 28
Сценарий – место, где данные оживают
05/02/2023
Борис Тверитнев/Highload++ 29
Контекст
05/02/2023
• Место, где объектам с данными назначаются роли, которые они будут исполнять
• Отражение пользовательского сценария в исходном коде
Борис Тверитнев/Highload++ 3005/02/2023
Говорящие имена контекстов
05/02/2023Борис Тверитнев/Highload++ 31
Имя сценария + суффикс:• Command – синхронный
request/response сценарий• Policy – асинхронный publish/subscribe
сценарий
Борис Тверитнев/Highload++ 32
Пример
05/02/2023
Модель предметной области
B2B customers
B2C customers
Борис Тверитнев/Highload++ 3305/02/2023
Борис Тверитнев/Highload++ 3405/02/2023
Борис Тверитнев/Highload++ 3505/02/2023
Борис Тверитнев/Highload++ 3605/02/2023
Борис Тверитнев/Highload++ 3705/02/2023
Борис Тверитнев/Highload++ 3805/02/2023
Борис Тверитнев/Highload++ 39
Часть 3Цикл разработки
05/02/2023
Борис Тверитнев/Highload++ 40
DCI + DDD
05/02/2023
Борис Тверитнев/Highload++ 41
Доменные события
05/02/2023
• DCI контекст – это транзакция события – результат
• События разрывают зависимость между бизнес-логикой и инфраструктурой
Борис Тверитнев/Highload++ 4205/02/2023
Борис Тверитнев/Highload++ 4305/02/2023
Борис Тверитнев/Highload++ 44
Агрегат
05/02/2023
• Корневой объект агрегата проверяет все инварианты
• Правильно обозначить границы агрегата довольно сложно
Борис Тверитнев/Highload++ 4505/02/2023
05/02/2023Борис Тверитнев/Highload++ 46
Борис Тверитнев/Highload++ 47
DCI + TDD
05/02/2023
Борис Тверитнев/Highload++ 48
TDD без трения
05/02/2023
• Тесты организованы в терминах DCI
• Позволяет рефакторить код, не ломая тесты
• Исполняемая и верифицируемая документация
Борис Тверитнев/Highload++ 4905/02/2023
Борис Тверитнев/Highload++ 5005/02/2023
Борис Тверитнев/Highload++ 51
DCI + другие ООП языки!Ruby
05/02/2023
Борис Тверитнев/Highload++ 5205/02/2023
http://www.horsdal-consult.dk/2010/12/options-for-dci-on-net.html
Борис Тверитнев/Highload++ 5305/02/2023
http://fulloo.info/Examples/Marvin/MoneyTransfer/Listings/MoneyTransfer/
Борис Тверитнев/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
Борис Тверитнев/Highload++ 5505/02/2023
https://github.com/DCI/scaladci-demo/blob/master/demo/src/main/scala/MoneyTransferApp.scala
Борис Тверитнев/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
Борис Тверитнев/Highload++ 57
Часть 4Выводы
05/02/2023
Борис Тверитнев/Highload++ 58
Выводы
05/02/2023
• DCI локализует часто меняющуюся бизнес-логику
• Помогает в DDD• DCI и DDD не нужны в
‘CRUD’ приложениях• Упрощает TDD
Спасибо за внимание.
www.xing.com
Борис Тверитнев/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