dci - anug 24th november 2010

30
DCI Paradigm ANUG, 24. november 2010

Upload: christian-horsdal

Post on 19-May-2015

708 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: DCI - ANUG 24th November 2010

DCI Paradigm ANUG, 24. november 2010

Page 2: DCI - ANUG 24th November 2010

Agenda• Intro to the DCI paradigm

• Real OO• Real separation of concerns• Readable business logic• Testable

• Break• Demo

Page 3: DCI - ANUG 24th November 2010

Who Am I?• Comp. Sci. master from University of Aarhus 2001• Developer and Architect at Mjølner Informatics• Blog: horsdal.blogspot.com

Page 4: DCI - ANUG 24th November 2010

4

Domain models at a glanceWikipedia:

a conceptual model of a system which describes the various entities involved in that system and their relationships

“Basic domain concepts change slowly; it’s the features and technology that change rapidly”

-James O. Coplien

“a conceptual model of a system which describes the various entities involved in that system and their relationships”

-Wikipedia

Page 5: DCI - ANUG 24th November 2010

Domain Model at a Glance• About vocabulary

• UL

• About objects first• Classes a distant second

• The very core of OO architectures• Captures the essence

L © 2009

5

Page 6: DCI - ANUG 24th November 2010

6

MVC at a glanceProblem

Develop UI that:• Supports change w/o affecting core

functionality• Displays current state and responds to state

changes immediately

SolutionDivide into three loosely coupled parts:

• Model objects encapsulate a core entities• Views present data and information to the

user.• Controllers are associated with views and

allow manipulation of the presented data and information.

11

Page 7: DCI - ANUG 24th November 2010

L © 2009

7

Direct manipulation metaphor

Page 8: DCI - ANUG 24th November 2010

MVC at a glance….again

L © 2009

8

Originally about the end user

Page 9: DCI - ANUG 24th November 2010

MVC at a glance….again

L © 2009

9

Great for simple apps

Page 10: DCI - ANUG 24th November 2010

But where is the behavior?

L © 2009

10

Page 11: DCI - ANUG 24th November 2010

Moving Into Use Case Territory

• Varied behavior• Complex behavior• Domain knowledge mandated

L © 2009

11

Page 12: DCI - ANUG 24th November 2010

L © 2009

12

Moving Into Use Case Territory

Page 13: DCI - ANUG 24th November 2010

Where are the Objects Here?

L © 2009

13

Which accounts?

Classes?

Roles!

Objects

Page 14: DCI - ANUG 24th November 2010

Where is the use case implemented?

L © 2009

14

Page 15: DCI - ANUG 24th November 2010

Where is the use case implemented?

L © 2009

15

___

___

___ ___

___

___

Page 16: DCI - ANUG 24th November 2010

L © 2009

16

The conflict“Basic domain concepts change

slowly; it’s the features and technology that change rapidly”

-James O. Coplien

“[…] algorithms are, or should be, first class citizens in most programs”

-James O. Coplien

Traditional OO spreads algorithms across objects

Features are often in service objects…these tend to break the connection between domain model and UI

Page 17: DCI - ANUG 24th November 2010

“Is” vs “Does”

17 L © 2009

What the system

does

What the system isDomain model

Database schemaArchitecture

Stable

End user interactionUser experiencesDesign

Ever changing

Page 18: DCI - ANUG 24th November 2010

L © 2009

18

DCI: Roles

• In the implementation of use cases• Objects are manipulated• Objects play roles• Objects can take on several roles during runtime• Roles can be played by several types of objects• Actions are associated with roles

• Where are actions associated with roles implemented?

Page 19: DCI - ANUG 24th November 2010

19

DCI: Interaction

• Involves several domain objects selected dynamically• …based on context

• Implemented in the roles

SavingAccount as MoneySource CheckinngAccount as MoneySink TransactionManager

Page 20: DCI - ANUG 24th November 2010

20

DCI: Context

• Encapsulates runtime object graph• Assign roles to objects

• not to classes

MoneyTransferContex

MoneySource MoneySink TransactionManager

Page 21: DCI - ANUG 24th November 2010

21

DCI: Data

• Concrete domain objects• Dumb or barely smart

SavingAccount

BalanceAccount numberOwner

CheckingAccount

BalanceAccount numberOwner

Page 22: DCI - ANUG 24th November 2010

L © 2009

22

DCI and MVC in Concert

Page 23: DCI - ANUG 24th November 2010

L © 2009

23

The conflict - Solved“Basic domain concepts change

slowly; it’s the features and technology that change rapidly”

-James O. Coplien

“[…] algorithms are, or should be, first class citizens in most programs”

-James O. Coplien

Roles separate features from core domain concepts

Context or roles contain the algorithms directly

Page 24: DCI - ANUG 24th November 2010

Where are actions associated with roles implemented?

L © 2009

24

Page 25: DCI - ANUG 24th November 2010

L © 2009

25

Traits at a glanceTraits are a simple composition mechanism for structuring

object-oriented programs. A Trait is essentially a parameterized set of methods; it serves as a behavioral building block for classes and is the primitive unit of code reuse. With Traits, classes are still organized in a single inheritance hierarchy, but they can make use of Traits to specify the incremental difference in behavior with respect to their superclasses.

-http://scg.unibe.ch/research/traits

Page 26: DCI - ANUG 24th November 2010

L © 2009

26

SavingsAccount CheckingAccount

<<Abstract>>Account

<<interface>>MoneySource

<<interface>>MoneySink

<<trait>>TransferMoneySource

TransferMoneyContext

Methodless roles

Model

Methodfull roles

Context

Page 27: DCI - ANUG 24th November 2010

Where are actions associated with roles implemented?

• In traits!• Composition of domain objects and role traits

• Hard in many languages• But geeky tricks follow

L © 2009

27

Page 28: DCI - ANUG 24th November 2010

Background - DCI

• Invented by Trygve Reenskaug• Who also invented MVC

• James O. Coplien recently published a book about DCI, agile and lean

• Nice implementation in Scala, Ruby and Smalltalk• Acceptable implementations in Python, C++, C# and others

Page 29: DCI - ANUG 24th November 2010

Acknowlegdements

• Direct manipulation metaphor and DCI overview drawings: Trygve Reenskaug in the common sense article

• Is vs. Does, MVC+DCI figure and quotes: James O. Copliens book

Page 30: DCI - ANUG 24th November 2010

References• The book:

http://www.amazon.co.uk/Lean-Architecture-Agile-Software-Development/dp/0470684208/ref=sr_1_1?ie=UTF8&s=books&qid=1282367651&sr=8-1

• Introductory article: http://www.artima.com/articles/dci_vision.html • Data, Context, and Interaction, an architectural pattern in computer

software development http://en.wikipedia.org/wiki/DCI• DCI home:

http://heim.ifi.uio.no/~trygver/themes/babyide/babyide-index.html • My C# DCI sample: http://horsdal.blogspot.com/2009/05/dci-in-c.html• Google group:

http://groups.google.com/group/object-composition?hl=en