DCI - ANUG 24th November 2010

Preview:

Citation preview

DCI Paradigm ANUG, 24. november 2010

Agenda• Intro to the DCI paradigm

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

• Break• Demo

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

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

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

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

L © 2009

7

Direct manipulation metaphor

MVC at a glance….again

L © 2009

8

Originally about the end user

MVC at a glance….again

L © 2009

9

Great for simple apps

But where is the behavior?

L © 2009

10

Moving Into Use Case Territory

• Varied behavior• Complex behavior• Domain knowledge mandated

L © 2009

11

L © 2009

12

Moving Into Use Case Territory

Where are the Objects Here?

L © 2009

13

Which accounts?

Classes?

Roles!

Objects

Where is the use case implemented?

L © 2009

14

Where is the use case implemented?

L © 2009

15

___

___

___ ___

___

___

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

“Is” vs “Does”

17 L © 2009

What the system

does

What the system isDomain model

Database schemaArchitecture

Stable

End user interactionUser experiencesDesign

Ever changing

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?

19

DCI: Interaction

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

• Implemented in the roles

SavingAccount as MoneySource CheckinngAccount as MoneySink TransactionManager

20

DCI: Context

• Encapsulates runtime object graph• Assign roles to objects

• not to classes

MoneyTransferContex

MoneySource MoneySink TransactionManager

21

DCI: Data

• Concrete domain objects• Dumb or barely smart

SavingAccount

BalanceAccount numberOwner

CheckingAccount

BalanceAccount numberOwner

L © 2009

22

DCI and MVC in Concert

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

Where are actions associated with roles implemented?

L © 2009

24

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

L © 2009

26

SavingsAccount CheckingAccount

<<Abstract>>Account

<<interface>>MoneySource

<<interface>>MoneySink

<<trait>>TransferMoneySource

TransferMoneyContext

Methodless roles

Model

Methodfull roles

Context

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

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

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

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

Recommended