The document discusses Data-Context-Interaction (DCI), an architectural pattern that aims to address issues with traditional object-oriented programming (OOP). It describes how DCI separates objects into data, contexts, and roles to better model real-world behavior and interactions. DCI is shown to complement other architectures like domain-driven design (DDD) and test-driven development (TDD) by helping to define aggregates and promoting behavior-driven development. The document provides examples of how DCI can be implemented in different programming languages and concludes that DCI touches on key aspects of agile development processes.
5. “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
7. 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
8. “I made up the term 'object-oriented', and I
can tell you I didn't have C++ in mind”
Alan Kay
OOPSLA '97
15. Users’ mental models
•What the system is
•What the system does
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 15
16. 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
18. Interaction (Roles)
•Roles describe the algorithms defining what
the system does
•Traits of objects
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 18
19. 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
21. 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
22. Hide Client Context example
10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 22
32. 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
36. DCI and TDD
Removing the friction
http://i.dailymail.co.uk/i/pix/2013/02/23/article-2283273-1835CCED000005DC-212_634x438.jpg
37. 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
38. 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
42. Application
techniques
Different ways in different languages
http://images2.fanpop.com/image/photos/9700000/Penguin-of-Death-penguins-of-madagascar-9714329-800-
600.gif
43. 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
45. 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
47. 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
Editor's Notes
Включаем мозги
С практической точки зрения
1,5 года и продолжаем открывать аспекты
Примеры на руби
Вопросы по ходу 1-2 например чтобы уложиться
Опрос про MVC DCI
Опрос что такое ООП своими словами
Акцент на структуре данных
Алан Кей
Smalltalk на концепции
С++ сместил фокус на классы
Нет инструментов для моделирование поведения
Две разные системы в design и runtime
Если вы все еще мне не верите, то послушайте автора термина.
Продемонстрировать на реальном примере
Бизнес правила стейкхолдеры
Структура: клиент-контракт-продукт-фича пользователь-клиент
Каналы продаж
Типы продуктов
Типы подписок
Модель до DCI
Сценарий заморозки легко видно
Все? Нет.
Разные фичи как иерархия классов с поведением в наследниках
XING событийная платформа
Полиморфизм
Один из простейших сценариев
Иллюзия реальности
Разные модели
Модель из двух аспектов
структура (IS) и поведение/взаимодействие (DOES)
Стабильная часть
Структурв – What the system IS
Тупые DTO
Классы domain model
Существительные и глаголы в OOP
Query методы
Динамическая и часто меняющаяся часть
Алгоритмы взаимодействия – What the system DOES
Пример со мной как со спикером взаимодействующим со слушателями
Stateless
Модули в Ruby
Место где объектам присваиваются роли
Пример со мной
Локальный identity
Описание usecase – измененный в процессе рефакторинга
Naming convention command, query (spec), policy
Модули примешиваются, механика Ruby
Один объект, 2 роли, явное взаимодействие
Инвариант, основной поток
Алгоритм как на ладони
Во что резолвится self
Объект к которому будет примешана роль в контексте определенного сенария
Расскажите мне что происходит в этом контексте
Имя – подписки с регулярным продлением
Роли и объекты
Инвариант
Основной поток
Взаимодействие с Debtor
Два потока
чудо
DDD – изменяющаяся модель
Структура доменной модели
Агрегат
Пример
Локальная идентичность
Root, границы, ссылки и проверка инвариантов
DCI роли как подсказка
Клиент очевидный агрегат
Но границы неясны
Очевидные границы
Employer как рлсказка
Контракт как самостоятельный агрегат
События как нотификации об изменениях
Развязывает части системы
Контексты как границы где происходят изменения
Роль возвращает события
Не определяет как они обрабатываются
Messaging
Monitoring
Stats
Boilerplate код
DCI и DDD для часто меняющихся правил
Не нужны для CRUD
DDD однозначно выиграет от разделения статической и динамической частей
Применяем DCI в unit test
Unit test как еще один клиент системы
Документация в исполняемом виде
Top-down feature driven approach
BDD
Тестируем не интерфейс а поведение
Top down approach
Набор требований к поведению в разных usecase от одного stakeholder
Role-object-context(usecase)
Альтернативные потоки
Для тестирования не нужны объекты domain model можно заменить затычками
Настоящие unit-test в Rails
Основной поток
Подробные примеры на сайте fulloo и в google group object composition
People and communication over tools and processes
Любить изменения