Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
DCI @ XING
hardwiring brains
Boris Tveritnev
XING Architecture at a glance
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 2
Index
The problem
Problem by example
DCI
DCI and DDD
DCI and TDD
Application techniques
Takeaway
The
problem(s)
Object Oriented Programming
http://donkeykong.wikia.com/wiki/User:CoolHungryYoshi?file=Donkey-kong-clean.gif
“I thought of objects being like biological
cells and/or individual computers on a
network, only able to communicate with
messages”
Alan Kay
http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en
Something went really wrong
• Simula (1967)
• Smalltalk (1980)
• C++ (1983)
• Java (1995)
• C# (2000)
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 6
OOP as it is
•There is little in object orientation, that helps
the developer capture doing in the code
•One can’t reason about system behavior in
runtime
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 7
https://s-media-cache-ak0.pinimg.com/736x/c2/02/1c/c2021c66544d3b66495d7d489f527405.jpg
“I made up the term 'object-oriented', and I
can tell you I didn't have C++ in mind”
Alan Kay
OOPSLA '97
Payments
domain
@XING
http://www.kimberlywoodstucson.com/uploads/5/5/0/9/55094411/3783591_orig.png
Payments domain model
1010/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev
ONLINE OFFLINE IN-APP
BONUS
B2B
customers
B2C
customers
Pay UsePayUsePay Pay Pay Pay
Pay
More
Pay
More
Use Bonus
Runtime vs design-time
1110/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev
Runtime vs design-time
1210/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev
Runtime vs design-time
1310/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev
Data-Context-
Interaction
Hardwiring brains
http://1.bp.blogspot.com/_MyFAOEj9GKk/S-QmbuYk56I/AAAAAAAAAEQ/sHc-mwJBacc/s1600/left-brain-right-
brain.jpg
Users’ mental models
•What the system is
•What the system does
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 15
Data (Records)
•Data objects express what the system is
•Methods and attributes that describe the data
•In essence they are just dumb DTOs
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 16
http://vignette1.wikia.nocookie.net/uncyclopedia/images/3/3a/Pac_man_pie_chart.jpg
Data example
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 17
Interaction (Roles)
•Roles describe the algorithms defining what
the system does
•Traits of objects
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 18
Roles and Biz Processes
•Customer - Sales
•Debtor - Accounting
•Employer - BizDev
•SupportClient - Support
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 19
https://ruthcatchen.files.wordpress.com/2012/03/artclass.jpg
Role example
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 20
Context
•Specifies a network of communicating Objects
as interconnected Roles
•Represents a single Use Case
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 21
Hide Client Context example
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 22
Client Role example
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 23
Role example
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 24
Renew Contract Context example
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 25
Contract Role example
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 26
Client Role example
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 27
DCI and DDD
Swore friends
http://data.whicdn.com/images/67570097/original.gif
Aggregates
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 29
•DDD defines Aggregate Root as an invariant
enforcing entry point
•DCI aids in finding correct aggregate
boundaries
http://petroloco.com/wp-content/uploads/2014/01/Disintegrating-01.jpg
Aggregate example
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 30
Aggregate example
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 31
Perfect match
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 32
•DCI context implements a complete Use Case
•Domain events are results of executing a Use
Case
https://s-media-cache-ak0.pinimg.com/736x/7f/f3/7c/7ff37ca2c4d90a56064d0fc3d42ef58a.jpg
Domain events example
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 33
Domain events example
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 34
Common restrictions
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 35
You need neither of them to build this
DCI and TDD
Removing the friction
http://i.dailymail.co.uk/i/pix/2013/02/23/article-2283273-1835CCED000005DC-212_634x438.jpg
Promoting BDD
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 37
•Feature-driven top-down approach
•Structures the code and thought
http://www.codelanders.com/wp-content/uploads/2015/04/DDD_TDD_BDD_intersection.png
Zero-friction TDD
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 38
•Allows to refactor inner parts without
constantly breaking tests
•With enough attention one can get pretty
close to executable specifications
http://icons.wunderground.com/data/wximagenew/l/ljranch/6.jpg
BDD example
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 39
BDD example
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 40
BDD example
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 41
Application
techniques
Different ways in different languages
http://images2.fanpop.com/image/photos/9700000/Penguin-of-Death-penguins-of-madagascar-9714329-800-
600.gif
Libraries/Languages
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 43
•C#: with Extension methods or dynamic
•Marvin: .Net CLI compatible language,
designed for DCI
•Ruby: with Method injection or using Maroon
•Javascript: hasOwnProperty and apply
•Java: Apache Zest (former Qi4J)
•Scala: traits
•C++: with Templates
Takeaway
http://personal.lse.ac.uk/robert49/ebooks/PhilSciAdventures/img/memory-brain.jpg
Win!
Touches key areas of agile process
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 45
•Analysis with User Stories and Use Cases
•Customer can be closely involved in
discussions
•Embracing change separating stable domain
model from changing User Stories
•Aids in DDD application
•Promotes BDD
www.xing.com
Thank you
for your
attention!
Boris Tveritnev
More info
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 47
1. http://www.artima.com/articles/dci_vision.html
2. DCI Glossary: http://folk.uio.no/trygver/2011/DCI-Glossary.pdf
3. http://fulloo.info/
4. https://groups.google.com/forum/#!forum/object-composition
5. 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

More Related Content

DCI @ XING

Editor's Notes

  1. Включаем мозги
  2. С практической точки зрения 1,5 года и продолжаем открывать аспекты Примеры на руби Вопросы по ходу 1-2 например чтобы уложиться Опрос про MVC DCI
  3. Опрос что такое ООП своими словами Акцент на структуре данных
  4. Алан Кей
  5. Smalltalk на концепции С++ сместил фокус на классы
  6. Нет инструментов для моделирование поведения Две разные системы в design и runtime
  7. Если вы все еще мне не верите, то послушайте автора термина.
  8. Продемонстрировать на реальном примере Бизнес правила стейкхолдеры
  9. Структура: клиент-контракт-продукт-фича пользователь-клиент Каналы продаж Типы продуктов Типы подписок
  10. Модель до DCI Сценарий заморозки легко видно
  11. Все? Нет. Разные фичи как иерархия классов с поведением в наследниках
  12. XING событийная платформа Полиморфизм Один из простейших сценариев
  13. Иллюзия реальности Разные модели
  14. Модель из двух аспектов структура (IS) и поведение/взаимодействие (DOES)
  15. Стабильная часть Структурв – What the system IS Тупые DTO
  16. Классы domain model Существительные и глаголы в OOP Query методы
  17. Динамическая и часто меняющаяся часть Алгоритмы взаимодействия – What the system DOES Пример со мной как со спикером взаимодействующим со слушателями
  18. Stateless Модули в Ruby
  19. Место где объектам присваиваются роли Пример со мной Локальный identity
  20. Описание usecase – измененный в процессе рефакторинга Naming convention command, query (spec), policy Модули примешиваются, механика Ruby Один объект, 2 роли, явное взаимодействие Инвариант, основной поток
  21. Алгоритм как на ладони
  22. Во что резолвится self Объект к которому будет примешана роль в контексте определенного сенария
  23. Расскажите мне что происходит в этом контексте Имя – подписки с регулярным продлением Роли и объекты Инвариант Основной поток
  24. Взаимодействие с Debtor Два потока
  25. чудо
  26. DDD – изменяющаяся модель Структура доменной модели
  27. Агрегат Пример Локальная идентичность Root, границы, ссылки и проверка инвариантов DCI роли как подсказка
  28. Клиент очевидный агрегат Но границы неясны
  29. Очевидные границы Employer как рлсказка Контракт как самостоятельный агрегат
  30. События как нотификации об изменениях Развязывает части системы Контексты как границы где происходят изменения
  31. Роль возвращает события Не определяет как они обрабатываются
  32. Messaging Monitoring Stats Boilerplate код
  33. DCI и DDD для часто меняющихся правил Не нужны для CRUD DDD однозначно выиграет от разделения статической и динамической частей
  34. Применяем DCI в unit test Unit test как еще один клиент системы
  35. Документация в исполняемом виде Top-down feature driven approach BDD
  36. Тестируем не интерфейс а поведение
  37. Top down approach Набор требований к поведению в разных usecase от одного stakeholder Role-object-context(usecase)
  38. Альтернативные потоки Для тестирования не нужны объекты domain model можно заменить затычками Настоящие unit-test в Rails
  39. Основной поток
  40. Подробные примеры на сайте fulloo и в google group object composition
  41. People and communication over tools and processes Любить изменения