47
DCI @ XING hardwiring brains Boris Tveritnev

DCI @ XING

Embed Size (px)

Citation preview

Page 1: DCI @ XING

DCI @ XING

hardwiring brainsBoris Tveritnev

Page 2: DCI @ XING

XING Architecture at a glance

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 2

Page 3: DCI @ XING

Index

The problem

Problem by example

DCI

DCI and DDD

DCI and TDD

Application techniques

Takeaway

Page 4: DCI @ XING

The

problem(s)Object Oriented Programming

http://donkeykong.wikia.com/wiki/User:CoolHungryYoshi?file=Donkey-kong-clean.gif

Page 5: DCI @ XING

“I thought of objects being like biological cells and/or individual computers on a network, only able to communicatewith messages”

Alan Kay

http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en

Page 6: DCI @ XING

Something went really wrong

• Simula (1967)

• Smalltalk (1980)

• C++ (1983)

• Java (1995)

• C# (2000)

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 6

Page 7: DCI @ XING

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

Page 8: DCI @ XING

“I made up the term 'object-oriented', and I

can tell you I didn't have C++ in mind”

Alan Kay

OOPSLA '97

Page 9: DCI @ XING

Payments

domain@XING

http://www.kimberlywoodstucson.com/uploads/5/5/0/9/55094411/3783591_orig.png

Page 10: DCI @ XING

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 PayPay

More

Pay

MoreUse Bonus

Page 11: DCI @ XING

Runtime vs design-time

1110/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev

Page 12: DCI @ XING

Runtime vs design-time

1210/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev

Page 13: DCI @ XING

Runtime vs design-time

1310/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev

Page 14: DCI @ XING

Data-Context-

InteractionHardwiring brains

http://1.bp.blogspot.com/_MyFAOEj9GKk/S-QmbuYk56I/AAAAAAAAAEQ/sHc-mwJBacc/s1600/left-brain-right-

brain.jpg

Page 15: DCI @ XING

Users’ mental models

•What the system is

•What the system does

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 15

Page 16: DCI @ XING

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

Page 17: DCI @ XING

Data example

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 17

Page 18: DCI @ XING

Interaction (Roles)

•Roles describe the algorithms defining what

the system does

•Traits of objects

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 18

Page 19: DCI @ XING

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

Page 20: DCI @ XING

Role example

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 20

Page 21: DCI @ XING

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

Page 22: DCI @ XING

Hide Client Context example

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 22

Page 23: DCI @ XING

Client Role example

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 23

Page 24: DCI @ XING

Role example

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 24

Page 25: DCI @ XING

Renew Contract Context example

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 25

Page 26: DCI @ XING

Contract Role example

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 26

Page 27: DCI @ XING

Client Role example

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 27

Page 28: DCI @ XING

DCI and DDDSwore friends

http://data.whicdn.com/images/67570097/original.gif

Page 29: DCI @ XING

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

Page 30: DCI @ XING

Aggregate example

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 30

Page 31: DCI @ XING

Aggregate example

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 31

Page 32: DCI @ XING

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

Page 33: DCI @ XING

Domain events example

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 33

Page 34: DCI @ XING

Domain events example

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 34

Page 35: DCI @ XING

Common restrictions

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 35

You need neither of them to build this

Page 36: DCI @ XING

DCI and TDDRemoving the friction

http://i.dailymail.co.uk/i/pix/2013/02/23/article-2283273-1835CCED000005DC-212_634x438.jpg

Page 37: DCI @ XING

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

Page 38: DCI @ XING

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

Page 39: DCI @ XING

BDD example

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 39

Page 40: DCI @ XING

BDD example

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 40

Page 41: DCI @ XING

BDD example

10/25/2015 DCI @ XING // Boris Tveritnev // XPDays Kiev 41

Page 42: DCI @ XING

Application

techniquesDifferent ways in different languages

http://images2.fanpop.com/image/photos/9700000/Penguin-of-Death-penguins-of-madagascar-9714329-800-

600.gif

Page 43: DCI @ XING

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

Page 44: DCI @ XING

Takeaway

http://personal.lse.ac.uk/robert49/ebooks/PhilSciAdventures/img/memory-brain.jpg

Page 45: DCI @ XING

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

Page 46: DCI @ XING

www.xing.com

Thank you

for your

attention!

Boris Tveritnev

Page 47: DCI @ XING

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