DCI
                                Data, Context and
                                   Interaction
                               Fabrizio Giudici, Senior Java Architect
                            Tidalwave s.a.s - fabrizio.giudici@tidalwave.it



Wednesday, April 20, 2011                                                     1
About the speaker




   DCI                                          2
Wednesday, April 20, 2011                           2
About the speaker

       •       Senior Software Architect, Mentor, Technical Writer
       •       Fourteen years of Java experience (JSE, JEE, JME, etc...)
       •       Sun partner since 1998, Oracle consultant since 2010
       •       Author of a number of open source projects
       •       Speaker at JavaOne, Devoxx, Jazoon, JAX and other events
       •       Member of the NetBeans Dream Team
       •       Co-leader of JUG Milano
       •       Java.Net blogger at http://www.java.net/blogs/fabriziogiudici

   DCI                                                                         2
Wednesday, April 20, 2011                                                          2
Agenda




   DCI                               3
Wednesday, April 20, 2011                3
Agenda


       •       Two real world examples




   DCI                                      3
Wednesday, April 20, 2011                       3
Agenda


       •       Two real world examples
       •       DCI - Basic concepts




   DCI                                         3
Wednesday, April 20, 2011                          3
Agenda


       •       Two real world examples
       •       DCI - Basic concepts
       •       DCI - How to implement?




   DCI                                         3
Wednesday, April 20, 2011                          3
Agenda


       •       Two real world examples
       •       DCI - Basic concepts
       •       DCI - How to implement?
       •       Some simple examples




   DCI                                         3
Wednesday, April 20, 2011                          3
Agenda


       •       Two real world examples
       •       DCI - Basic concepts
       •       DCI - How to implement?
       •       Some simple examples
       •       Abstracting and sweetening



   DCI                                         3
Wednesday, April 20, 2011                          3
Two real world
                              examples




Wednesday, April 20, 2011                    4
Shameless Plug




   DCI                                       5
Wednesday, April 20, 2011                        5
Shameless Plug



       •       Exercises of Design - my design book...




   DCI                                                   5
Wednesday, April 20, 2011                                    5
Shameless Plug



       •       Exercises of Design - my design book...
             •       Just started!




   DCI                                                   5
Wednesday, April 20, 2011                                    5
Shameless Plug



       •       Exercises of Design - my design book...
             •       Just started!

       •       http://exercisesofdesign.java.net




   DCI                                                   5
Wednesday, April 20, 2011                                    5
The Observation API



       •       A core component of blueBill Mobile
       •       An application about recording bird observations
       •       Designed with a high degree of abstraction




   DCI                                                            6
Wednesday, April 20, 2011                                             6
The Observation API



       •       A core component of blueBill Mobile
       •       An application about recording bird observations
       •       Designed with a high degree of abstraction




   DCI                                                            6
Wednesday, April 20, 2011                                             6
The Observation API



       •       A core component of blueBill Mobile
       •       An application about recording bird observations
       •       Designed with a high degree of abstraction




   DCI                                                            6
Wednesday, April 20, 2011                                             6
DCI                      7
Wednesday, April 20, 2011       7
The Taxonomy API




       •       Models the taxonomy of a philogenetic tree
             •       The standard way of biology for representing living beings species




   DCI                                                                                    8
Wednesday, April 20, 2011                                                                     8
DCI                      9
Wednesday, April 20, 2011       9
DCI - Basic Concepts




Wednesday, April 20, 2011                          10
Data, Context and Interaction




   DCI                                                 11
Wednesday, April 20, 2011                                   11
Data, Context and Interaction


       •       OOD best practice invented by Trygve Reenskaug




   DCI                                                          11
Wednesday, April 20, 2011                                            11
Data, Context and Interaction


       •       OOD best practice invented by Trygve Reenskaug
             •       The formalizer of MVC




   DCI                                                          11
Wednesday, April 20, 2011                                            11
Data, Context and Interaction


       •       OOD best practice invented by Trygve Reenskaug
             •       The formalizer of MVC

       •       Seen as an evolution of MVC




   DCI                                                          11
Wednesday, April 20, 2011                                            11
Data, Context and Interaction


       •       OOD best practice invented by Trygve Reenskaug
             •       The formalizer of MVC

       •       Seen as an evolution of MVC
             •       But it doesn’t replace it




   DCI                                                          11
Wednesday, April 20, 2011                                            11
Data, Context and Interaction


       •       OOD best practice invented by Trygve Reenskaug
             •       The formalizer of MVC

       •       Seen as an evolution of MVC
             •       But it doesn’t replace it
             •       It rather broadens the analysis scope




   DCI                                                          11
Wednesday, April 20, 2011                                            11
Data, Context and Interaction


       •       OOD best practice invented by Trygve Reenskaug
             •       The formalizer of MVC

       •       Seen as an evolution of MVC
             •       But it doesn’t replace it
             •       It rather broadens the analysis scope

       •       http://www.artima.com/articles/dci_vision.html



   DCI                                                          11
Wednesday, April 20, 2011                                            11
DCI - aims




   DCI                                   12
Wednesday, April 20, 2011                     12
DCI - aims

       •       Improve readability of a OO system




   DCI                                              12
Wednesday, April 20, 2011                                12
DCI - aims

       •       Improve readability of a OO system
       •       Give system behaviour first-class status




   DCI                                                   12
Wednesday, April 20, 2011                                     12
DCI - aims

       •       Improve readability of a OO system
       •       Give system behaviour first-class status
             •       Recover readability of system properties on the whole




   DCI                                                                       12
Wednesday, April 20, 2011                                                         12
DCI - aims

       •       Improve readability of a OO system
       •       Give system behaviour first-class status
             •       Recover readability of system properties on the whole

       •       Separate responsibilities for behaviour and domain




   DCI                                                                       12
Wednesday, April 20, 2011                                                         12
DCI - aims

       •       Improve readability of a OO system
       •       Give system behaviour first-class status
             •       Recover readability of system properties on the whole

       •       Separate responsibilities for behaviour and domain
             •       Behaviour: what the system does




   DCI                                                                       12
Wednesday, April 20, 2011                                                         12
DCI - aims

       •       Improve readability of a OO system
       •       Give system behaviour first-class status
             •       Recover readability of system properties on the whole

       •       Separate responsibilities for behaviour and domain
             •       Behaviour: what the system does
             •       Domain: what the system is




   DCI                                                                       12
Wednesday, April 20, 2011                                                         12
DCI - aims

       •       Improve readability of a OO system
       •       Give system behaviour first-class status
             •       Recover readability of system properties on the whole

       •       Separate responsibilities for behaviour and domain
             •       Behaviour: what the system does
             •       Domain: what the system is

       •       Be close to people’s mental model


   DCI                                                                       12
Wednesday, April 20, 2011                                                         12
DCI - Data




   DCI                                   13
Wednesday, April 20, 2011                     13
DCI - Data

       •       What the system is




   DCI                                           13
Wednesday, April 20, 2011                             13
DCI - Data

       •       What the system is
       •       Relatively static with relations




   DCI                                            13
Wednesday, April 20, 2011                              13
DCI - Data

       •       What the system is
       •       Relatively static with relations
       •       Domain structure implemented with “conventional” classes




   DCI                                                                    13
Wednesday, April 20, 2011                                                      13
DCI - Data

       •       What the system is
       •       Relatively static with relations
       •       Domain structure implemented with “conventional” classes
       •       Typically it includes persistence




   DCI                                                                    13
Wednesday, April 20, 2011                                                      13
DCI - Data

       •       What the system is
       •       Relatively static with relations
       •       Domain structure implemented with “conventional” classes
       •       Typically it includes persistence
       •       Comes from the mental model of system stakeholders




   DCI                                                                    13
Wednesday, April 20, 2011                                                      13
DCI - Data

       •       What the system is
       •       Relatively static with relations
       •       Domain structure implemented with “conventional” classes
       •       Typically it includes persistence
       •       Comes from the mental model of system stakeholders
       •       Close to the “model” in MVC



   DCI                                                                    13
Wednesday, April 20, 2011                                                      13
DCI - Data

       •       What the system is
       •       Relatively static with relations
       •       Domain structure implemented with “conventional” classes
       •       Typically it includes persistence
       •       Comes from the mental model of system stakeholders
       •       Close to the “model” in MVC
       •       Example: BankAccount with increase(), decrease(); no deposit()


   DCI                                                                          13
Wednesday, April 20, 2011                                                            13
DCI - Context (and Roles)




   DCI                                                  14
Wednesday, April 20, 2011                                    14
DCI - Context (and Roles)

       •       Associated to a use case, user story, scenario, or algorithm




   DCI                                                                        14
Wednesday, April 20, 2011                                                          14
DCI - Context (and Roles)

       •       Associated to a use case, user story, scenario, or algorithm
       •       Identifies objects participating in a scenario




   DCI                                                                        14
Wednesday, April 20, 2011                                                          14
DCI - Context (and Roles)

       •       Associated to a use case, user story, scenario, or algorithm
       •       Identifies objects participating in a scenario
       •       Assign to each object one or more stateless roles




   DCI                                                                        14
Wednesday, April 20, 2011                                                          14
DCI - Context (and Roles)

       •       Associated to a use case, user story, scenario, or algorithm
       •       Identifies objects participating in a scenario
       •       Assign to each object one or more stateless roles
             •       Objects can have multiple roles at the same time




   DCI                                                                        14
Wednesday, April 20, 2011                                                          14
DCI - Context (and Roles)

       •       Associated to a use case, user story, scenario, or algorithm
       •       Identifies objects participating in a scenario
       •       Assign to each object one or more stateless roles
             •       Objects can have multiple roles at the same time

       •       Decompose the use case (etc...) into roles, not objects




   DCI                                                                        14
Wednesday, April 20, 2011                                                          14
DCI - Context (and Roles)

       •       Associated to a use case, user story, scenario, or algorithm
       •       Identifies objects participating in a scenario
       •       Assign to each object one or more stateless roles
             •       Objects can have multiple roles at the same time

       •       Decompose the use case (etc...) into roles, not objects
             •       Contrast this with polymorphism and classic OO decomposition




   DCI                                                                              14
Wednesday, April 20, 2011                                                                14
DCI - Context (and Roles)

       •       Associated to a use case, user story, scenario, or algorithm
       •       Identifies objects participating in a scenario
       •       Assign to each object one or more stateless roles
             •       Objects can have multiple roles at the same time

       •       Decompose the use case (etc...) into roles, not objects
             •       Contrast this with polymorphism and classic OO decomposition

       •       Example: MoneyTransfer with SrcAccount and DestAccount


   DCI                                                                              14
Wednesday, April 20, 2011                                                                14
Quick terminology note




   DCI                                               15
Wednesday, April 20, 2011                                 15
Quick terminology note



       •       Methodless role: abstract role




   DCI                                               15
Wednesday, April 20, 2011                                 15
Quick terminology note



       •       Methodless role: abstract role
             •       Interface, abstract class




   DCI                                               15
Wednesday, April 20, 2011                                 15
Quick terminology note



       •       Methodless role: abstract role
             •       Interface, abstract class

       •       Methodful role: concrete role




   DCI                                               15
Wednesday, April 20, 2011                                 15
Quick terminology note



       •       Methodless role: abstract role
             •       Interface, abstract class

       •       Methodful role: concrete role
             •       Regular class




   DCI                                               15
Wednesday, April 20, 2011                                 15
DCI - Interaction




   DCI                                          16
Wednesday, April 20, 2011                            16
DCI - Interaction

       •       What the system does




   DCI                                          16
Wednesday, April 20, 2011                            16
DCI - Interaction

       •       What the system does
       •       Occurs among roles, which act as adapters to objects




   DCI                                                                16
Wednesday, April 20, 2011                                                  16
DCI - Interaction

       •       What the system does
       •       Occurs among roles, which act as adapters to objects
       •       Roles are bound in different ways for each context




   DCI                                                                16
Wednesday, April 20, 2011                                                  16
DCI - Interaction

       •       What the system does
       •       Occurs among roles, which act as adapters to objects
       •       Roles are bound in different ways for each context
       •       Roles should be generic




   DCI                                                                16
Wednesday, April 20, 2011                                                  16
DCI - Interaction

       •       What the system does
       •       Occurs among roles, which act as adapters to objects
       •       Roles are bound in different ways for each context
       •       Roles should be generic
       •       Roles life cycle is likely to be bound to a given interaction




   DCI                                                                         16
Wednesday, April 20, 2011                                                           16
DCI - Interaction

       •       What the system does
       •       Occurs among roles, which act as adapters to objects
       •       Roles are bound in different ways for each context
       •       Roles should be generic
       •       Roles life cycle is likely to be bound to a given interaction
       •       Interaction should be explicit given role nature, rather than
               emergent as in (agile) OOD


   DCI                                                                         16
Wednesday, April 20, 2011                                                           16
DCI - Execution Model




   DCI                                              17
Wednesday, April 20, 2011                                17
DCI - Execution Model


       •       The Context finds object participants




   DCI                                                17
Wednesday, April 20, 2011                                  17
DCI - Execution Model


       •       The Context finds object participants
       •       Then, it assigns (injects?) roles to them




   DCI                                                     17
Wednesday, April 20, 2011                                       17
DCI - Execution Model


       •       The Context finds object participants
       •       Then, it assigns (injects?) roles to them
             •       Roles find each other by type (methodless)




   DCI                                                           17
Wednesday, April 20, 2011                                             17
DCI - Execution Model


       •       The Context finds object participants
       •       Then, it assigns (injects?) roles to them
             •       Roles find each other by type (methodless)
             •       What about static languages and designs?




   DCI                                                           17
Wednesday, April 20, 2011                                             17
DCI - Execution Model


       •       The Context finds object participants
       •       Then, it assigns (injects?) roles to them
             •       Roles find each other by type (methodless)
             •       What about static languages and designs?

       •       Then, it invokes a method on the first role




   DCI                                                           17
Wednesday, April 20, 2011                                             17
DCI - Execution Model


       •       The Context finds object participants
       •       Then, it assigns (injects?) roles to them
             •       Roles find each other by type (methodless)
             •       What about static languages and designs?

       •       Then, it invokes a method on the first role
       •       Interaction goes on among other roles



   DCI                                                           17
Wednesday, April 20, 2011                                             17
DCI - How to
                             implement?




Wednesday, April 20, 2011                  18
Some design issues




   DCI                                           19
Wednesday, April 20, 2011                             19
Some design issues
       •       Static vs dynamic




   DCI                                           19
Wednesday, April 20, 2011                             19
Some design issues
       •       Static vs dynamic
       •       Traits, Mix-ins




   DCI                                           19
Wednesday, April 20, 2011                             19
Some design issues
       •       Static vs dynamic
       •       Traits, Mix-ins
       •       AOP, annotations (e.g. Qi4J)




   DCI                                           19
Wednesday, April 20, 2011                             19
Some design issues
       •       Static vs dynamic
       •       Traits, Mix-ins
       •       AOP, annotations (e.g. Qi4J)
       •       Problems: schizophrenia




   DCI                                           19
Wednesday, April 20, 2011                             19
Some design issues
       •       Static vs dynamic
       •       Traits, Mix-ins
       •       AOP, annotations (e.g. Qi4J)
       •       Problems: schizophrenia
             •       Which is the identity of an object that becomes a cluster of roles




   DCI                                                                                    19
Wednesday, April 20, 2011                                                                      19
Some design issues
       •       Static vs dynamic
       •       Traits, Mix-ins
       •       AOP, annotations (e.g. Qi4J)
       •       Problems: schizophrenia
             •       Which is the identity of an object that becomes a cluster of roles
             •       Partly solved by the clear separation object (stateful) / role
                     (stateless)




   DCI                                                                                    19
Wednesday, April 20, 2011                                                                      19
Some design issues
       •       Static vs dynamic
       •       Traits, Mix-ins
       •       AOP, annotations (e.g. Qi4J)
       •       Problems: schizophrenia
             •       Which is the identity of an object that becomes a cluster of roles
             •       Partly solved by the clear separation object (stateful) / role
                     (stateless)
             •       What about equals() / hashcode()?




   DCI                                                                                    19
Wednesday, April 20, 2011                                                                      19
Some design issues
       •       Static vs dynamic
       •       Traits, Mix-ins
       •       AOP, annotations (e.g. Qi4J)
       •       Problems: schizophrenia
             •       Which is the identity of an object that becomes a cluster of roles
             •       Partly solved by the clear separation object (stateful) / role
                     (stateless)
             •       What about equals() / hashcode()?

       •       Problem: anemic objects

   DCI                                                                                    19
Wednesday, April 20, 2011                                                                      19
Some design issues
       •       Static vs dynamic
       •       Traits, Mix-ins
       •       AOP, annotations (e.g. Qi4J)
       •       Problems: schizophrenia
             •       Which is the identity of an object that becomes a cluster of roles
             •       Partly solved by the clear separation object (stateful) / role
                     (stateless)
             •       What about equals() / hashcode()?

       •       Problem: anemic objects
             •       Really a problem in this perspective?
   DCI                                                                                    19
Wednesday, April 20, 2011                                                                      19
Designing with DCI




   DCI                                           20
Wednesday, April 20, 2011                             20
Designing with DCI



       •       First, acknowledge that DCI is a best practice




   DCI                                                          20
Wednesday, April 20, 2011                                            20
Designing with DCI



       •       First, acknowledge that DCI is a best practice
             •       Some languages can fit better than others




   DCI                                                          20
Wednesday, April 20, 2011                                            20
Designing with DCI



       •       First, acknowledge that DCI is a best practice
             •       Some languages can fit better than others
             •       Frameworks might help... but they force a new nature




   DCI                                                                      20
Wednesday, April 20, 2011                                                        20
Designing with DCI



       •       First, acknowledge that DCI is a best practice
             •       Some languages can fit better than others
             •       Frameworks might help... but they force a new nature
             •       My point: DCI must be addressed in design




   DCI                                                                      20
Wednesday, April 20, 2011                                                        20
Some UI-oriented
                               examples




Wednesday, April 20, 2011                      21
NodesExample 1



       •       Static role implementation
       •       Introduce some generic, (G)UI oriented roles
       •       NetBeans Platform’s Lookup based implementation




   DCI                                                           22
Wednesday, April 20, 2011                                             22
NodesExample 2




       •       Dynamically replacing roles with decorators




   DCI                                                       23
Wednesday, April 20, 2011                                         23
NodesExample 4




       •       Adding contextual Actions and ToolTips




   DCI                                                  24
Wednesday, April 20, 2011                                    24
NodesExample 5




       •       Removing UI dependencied




   DCI                                       25
Wednesday, April 20, 2011                         25
NodesExample 6




       •       Injecting roles from the Context




   DCI                                            26
Wednesday, April 20, 2011                              26
NodesExample 7




       •       Injecting Roles in function of the Context




   DCI                                                      27
Wednesday, April 20, 2011                                        27
Abstracting and
                              sweetening




Wednesday, April 20, 2011                     28
Abstracting and sweetening




       •       Would be nice to be technology independent
       •       Would be nice to have some syntactic sugar




   DCI                                                      29
Wednesday, April 20, 2011                                        29
as()




   DCI                             30
Wednesday, April 20, 2011               30
as()

       •       From Role role = object.getLookup().lookup(Role.class) ...




   DCI                                                                      30
Wednesday, April 20, 2011                                                        30
as()

       •       From Role role = object.getLookup().lookup(Role.class) ...
       •       ... to Role role = object.as(Role);




   DCI                                                                      30
Wednesday, April 20, 2011                                                        30
as()

       •       From Role role = object.getLookup().lookup(Role.class) ...
       •       ... to Role role = object.as(Role);
             •       As a wrapper around Lookup




   DCI                                                                      30
Wednesday, April 20, 2011                                                        30
as()

       •       From Role role = object.getLookup().lookup(Role.class) ...
       •       ... to Role role = object.as(Role);
             •       As a wrapper around Lookup
             •       With annotations and Lombok




   DCI                                                                      30
Wednesday, April 20, 2011                                                        30
as()

       •       From Role role = object.getLookup().lookup(Role.class) ...
       •       ... to Role role = object.as(Role);
             •       As a wrapper around Lookup
             •                     @AsCapable
                     With annotations and Lombok
                                  public class MyObject
                                   {
                                     @Role
                                     private Role1 r1 = new Role1();

                                       @Role // lazy
                                       private Provider<Role> r2 = ...;
   DCI
                                   }                                        30
Wednesday, April 20, 2011                                                        30
Q &A




       •       Question Time




   DCI                                31
Wednesday, April 20, 2011                  31

DCI - Data, Context and Interaction @ Jug Genova April 2011

  • 1.
    DCI Data, Context and Interaction Fabrizio Giudici, Senior Java Architect Tidalwave s.a.s - fabrizio.giudici@tidalwave.it Wednesday, April 20, 2011 1
  • 2.
    About the speaker DCI 2 Wednesday, April 20, 2011 2
  • 3.
    About the speaker • Senior Software Architect, Mentor, Technical Writer • Fourteen years of Java experience (JSE, JEE, JME, etc...) • Sun partner since 1998, Oracle consultant since 2010 • Author of a number of open source projects • Speaker at JavaOne, Devoxx, Jazoon, JAX and other events • Member of the NetBeans Dream Team • Co-leader of JUG Milano • Java.Net blogger at http://www.java.net/blogs/fabriziogiudici DCI 2 Wednesday, April 20, 2011 2
  • 4.
    Agenda DCI 3 Wednesday, April 20, 2011 3
  • 5.
    Agenda • Two real world examples DCI 3 Wednesday, April 20, 2011 3
  • 6.
    Agenda • Two real world examples • DCI - Basic concepts DCI 3 Wednesday, April 20, 2011 3
  • 7.
    Agenda • Two real world examples • DCI - Basic concepts • DCI - How to implement? DCI 3 Wednesday, April 20, 2011 3
  • 8.
    Agenda • Two real world examples • DCI - Basic concepts • DCI - How to implement? • Some simple examples DCI 3 Wednesday, April 20, 2011 3
  • 9.
    Agenda • Two real world examples • DCI - Basic concepts • DCI - How to implement? • Some simple examples • Abstracting and sweetening DCI 3 Wednesday, April 20, 2011 3
  • 10.
    Two real world examples Wednesday, April 20, 2011 4
  • 11.
    Shameless Plug DCI 5 Wednesday, April 20, 2011 5
  • 12.
    Shameless Plug • Exercises of Design - my design book... DCI 5 Wednesday, April 20, 2011 5
  • 13.
    Shameless Plug • Exercises of Design - my design book... • Just started! DCI 5 Wednesday, April 20, 2011 5
  • 14.
    Shameless Plug • Exercises of Design - my design book... • Just started! • http://exercisesofdesign.java.net DCI 5 Wednesday, April 20, 2011 5
  • 15.
    The Observation API • A core component of blueBill Mobile • An application about recording bird observations • Designed with a high degree of abstraction DCI 6 Wednesday, April 20, 2011 6
  • 16.
    The Observation API • A core component of blueBill Mobile • An application about recording bird observations • Designed with a high degree of abstraction DCI 6 Wednesday, April 20, 2011 6
  • 17.
    The Observation API • A core component of blueBill Mobile • An application about recording bird observations • Designed with a high degree of abstraction DCI 6 Wednesday, April 20, 2011 6
  • 18.
    DCI 7 Wednesday, April 20, 2011 7
  • 19.
    The Taxonomy API • Models the taxonomy of a philogenetic tree • The standard way of biology for representing living beings species DCI 8 Wednesday, April 20, 2011 8
  • 20.
    DCI 9 Wednesday, April 20, 2011 9
  • 21.
    DCI - BasicConcepts Wednesday, April 20, 2011 10
  • 22.
    Data, Context andInteraction DCI 11 Wednesday, April 20, 2011 11
  • 23.
    Data, Context andInteraction • OOD best practice invented by Trygve Reenskaug DCI 11 Wednesday, April 20, 2011 11
  • 24.
    Data, Context andInteraction • OOD best practice invented by Trygve Reenskaug • The formalizer of MVC DCI 11 Wednesday, April 20, 2011 11
  • 25.
    Data, Context andInteraction • OOD best practice invented by Trygve Reenskaug • The formalizer of MVC • Seen as an evolution of MVC DCI 11 Wednesday, April 20, 2011 11
  • 26.
    Data, Context andInteraction • OOD best practice invented by Trygve Reenskaug • The formalizer of MVC • Seen as an evolution of MVC • But it doesn’t replace it DCI 11 Wednesday, April 20, 2011 11
  • 27.
    Data, Context andInteraction • OOD best practice invented by Trygve Reenskaug • The formalizer of MVC • Seen as an evolution of MVC • But it doesn’t replace it • It rather broadens the analysis scope DCI 11 Wednesday, April 20, 2011 11
  • 28.
    Data, Context andInteraction • OOD best practice invented by Trygve Reenskaug • The formalizer of MVC • Seen as an evolution of MVC • But it doesn’t replace it • It rather broadens the analysis scope • http://www.artima.com/articles/dci_vision.html DCI 11 Wednesday, April 20, 2011 11
  • 29.
    DCI - aims DCI 12 Wednesday, April 20, 2011 12
  • 30.
    DCI - aims • Improve readability of a OO system DCI 12 Wednesday, April 20, 2011 12
  • 31.
    DCI - aims • Improve readability of a OO system • Give system behaviour first-class status DCI 12 Wednesday, April 20, 2011 12
  • 32.
    DCI - aims • Improve readability of a OO system • Give system behaviour first-class status • Recover readability of system properties on the whole DCI 12 Wednesday, April 20, 2011 12
  • 33.
    DCI - aims • Improve readability of a OO system • Give system behaviour first-class status • Recover readability of system properties on the whole • Separate responsibilities for behaviour and domain DCI 12 Wednesday, April 20, 2011 12
  • 34.
    DCI - aims • Improve readability of a OO system • Give system behaviour first-class status • Recover readability of system properties on the whole • Separate responsibilities for behaviour and domain • Behaviour: what the system does DCI 12 Wednesday, April 20, 2011 12
  • 35.
    DCI - aims • Improve readability of a OO system • Give system behaviour first-class status • Recover readability of system properties on the whole • Separate responsibilities for behaviour and domain • Behaviour: what the system does • Domain: what the system is DCI 12 Wednesday, April 20, 2011 12
  • 36.
    DCI - aims • Improve readability of a OO system • Give system behaviour first-class status • Recover readability of system properties on the whole • Separate responsibilities for behaviour and domain • Behaviour: what the system does • Domain: what the system is • Be close to people’s mental model DCI 12 Wednesday, April 20, 2011 12
  • 37.
    DCI - Data DCI 13 Wednesday, April 20, 2011 13
  • 38.
    DCI - Data • What the system is DCI 13 Wednesday, April 20, 2011 13
  • 39.
    DCI - Data • What the system is • Relatively static with relations DCI 13 Wednesday, April 20, 2011 13
  • 40.
    DCI - Data • What the system is • Relatively static with relations • Domain structure implemented with “conventional” classes DCI 13 Wednesday, April 20, 2011 13
  • 41.
    DCI - Data • What the system is • Relatively static with relations • Domain structure implemented with “conventional” classes • Typically it includes persistence DCI 13 Wednesday, April 20, 2011 13
  • 42.
    DCI - Data • What the system is • Relatively static with relations • Domain structure implemented with “conventional” classes • Typically it includes persistence • Comes from the mental model of system stakeholders DCI 13 Wednesday, April 20, 2011 13
  • 43.
    DCI - Data • What the system is • Relatively static with relations • Domain structure implemented with “conventional” classes • Typically it includes persistence • Comes from the mental model of system stakeholders • Close to the “model” in MVC DCI 13 Wednesday, April 20, 2011 13
  • 44.
    DCI - Data • What the system is • Relatively static with relations • Domain structure implemented with “conventional” classes • Typically it includes persistence • Comes from the mental model of system stakeholders • Close to the “model” in MVC • Example: BankAccount with increase(), decrease(); no deposit() DCI 13 Wednesday, April 20, 2011 13
  • 45.
    DCI - Context(and Roles) DCI 14 Wednesday, April 20, 2011 14
  • 46.
    DCI - Context(and Roles) • Associated to a use case, user story, scenario, or algorithm DCI 14 Wednesday, April 20, 2011 14
  • 47.
    DCI - Context(and Roles) • Associated to a use case, user story, scenario, or algorithm • Identifies objects participating in a scenario DCI 14 Wednesday, April 20, 2011 14
  • 48.
    DCI - Context(and Roles) • Associated to a use case, user story, scenario, or algorithm • Identifies objects participating in a scenario • Assign to each object one or more stateless roles DCI 14 Wednesday, April 20, 2011 14
  • 49.
    DCI - Context(and Roles) • Associated to a use case, user story, scenario, or algorithm • Identifies objects participating in a scenario • Assign to each object one or more stateless roles • Objects can have multiple roles at the same time DCI 14 Wednesday, April 20, 2011 14
  • 50.
    DCI - Context(and Roles) • Associated to a use case, user story, scenario, or algorithm • Identifies objects participating in a scenario • Assign to each object one or more stateless roles • Objects can have multiple roles at the same time • Decompose the use case (etc...) into roles, not objects DCI 14 Wednesday, April 20, 2011 14
  • 51.
    DCI - Context(and Roles) • Associated to a use case, user story, scenario, or algorithm • Identifies objects participating in a scenario • Assign to each object one or more stateless roles • Objects can have multiple roles at the same time • Decompose the use case (etc...) into roles, not objects • Contrast this with polymorphism and classic OO decomposition DCI 14 Wednesday, April 20, 2011 14
  • 52.
    DCI - Context(and Roles) • Associated to a use case, user story, scenario, or algorithm • Identifies objects participating in a scenario • Assign to each object one or more stateless roles • Objects can have multiple roles at the same time • Decompose the use case (etc...) into roles, not objects • Contrast this with polymorphism and classic OO decomposition • Example: MoneyTransfer with SrcAccount and DestAccount DCI 14 Wednesday, April 20, 2011 14
  • 53.
    Quick terminology note DCI 15 Wednesday, April 20, 2011 15
  • 54.
    Quick terminology note • Methodless role: abstract role DCI 15 Wednesday, April 20, 2011 15
  • 55.
    Quick terminology note • Methodless role: abstract role • Interface, abstract class DCI 15 Wednesday, April 20, 2011 15
  • 56.
    Quick terminology note • Methodless role: abstract role • Interface, abstract class • Methodful role: concrete role DCI 15 Wednesday, April 20, 2011 15
  • 57.
    Quick terminology note • Methodless role: abstract role • Interface, abstract class • Methodful role: concrete role • Regular class DCI 15 Wednesday, April 20, 2011 15
  • 58.
    DCI - Interaction DCI 16 Wednesday, April 20, 2011 16
  • 59.
    DCI - Interaction • What the system does DCI 16 Wednesday, April 20, 2011 16
  • 60.
    DCI - Interaction • What the system does • Occurs among roles, which act as adapters to objects DCI 16 Wednesday, April 20, 2011 16
  • 61.
    DCI - Interaction • What the system does • Occurs among roles, which act as adapters to objects • Roles are bound in different ways for each context DCI 16 Wednesday, April 20, 2011 16
  • 62.
    DCI - Interaction • What the system does • Occurs among roles, which act as adapters to objects • Roles are bound in different ways for each context • Roles should be generic DCI 16 Wednesday, April 20, 2011 16
  • 63.
    DCI - Interaction • What the system does • Occurs among roles, which act as adapters to objects • Roles are bound in different ways for each context • Roles should be generic • Roles life cycle is likely to be bound to a given interaction DCI 16 Wednesday, April 20, 2011 16
  • 64.
    DCI - Interaction • What the system does • Occurs among roles, which act as adapters to objects • Roles are bound in different ways for each context • Roles should be generic • Roles life cycle is likely to be bound to a given interaction • Interaction should be explicit given role nature, rather than emergent as in (agile) OOD DCI 16 Wednesday, April 20, 2011 16
  • 65.
    DCI - ExecutionModel DCI 17 Wednesday, April 20, 2011 17
  • 66.
    DCI - ExecutionModel • The Context finds object participants DCI 17 Wednesday, April 20, 2011 17
  • 67.
    DCI - ExecutionModel • The Context finds object participants • Then, it assigns (injects?) roles to them DCI 17 Wednesday, April 20, 2011 17
  • 68.
    DCI - ExecutionModel • The Context finds object participants • Then, it assigns (injects?) roles to them • Roles find each other by type (methodless) DCI 17 Wednesday, April 20, 2011 17
  • 69.
    DCI - ExecutionModel • The Context finds object participants • Then, it assigns (injects?) roles to them • Roles find each other by type (methodless) • What about static languages and designs? DCI 17 Wednesday, April 20, 2011 17
  • 70.
    DCI - ExecutionModel • The Context finds object participants • Then, it assigns (injects?) roles to them • Roles find each other by type (methodless) • What about static languages and designs? • Then, it invokes a method on the first role DCI 17 Wednesday, April 20, 2011 17
  • 71.
    DCI - ExecutionModel • The Context finds object participants • Then, it assigns (injects?) roles to them • Roles find each other by type (methodless) • What about static languages and designs? • Then, it invokes a method on the first role • Interaction goes on among other roles DCI 17 Wednesday, April 20, 2011 17
  • 72.
    DCI - Howto implement? Wednesday, April 20, 2011 18
  • 73.
    Some design issues DCI 19 Wednesday, April 20, 2011 19
  • 74.
    Some design issues • Static vs dynamic DCI 19 Wednesday, April 20, 2011 19
  • 75.
    Some design issues • Static vs dynamic • Traits, Mix-ins DCI 19 Wednesday, April 20, 2011 19
  • 76.
    Some design issues • Static vs dynamic • Traits, Mix-ins • AOP, annotations (e.g. Qi4J) DCI 19 Wednesday, April 20, 2011 19
  • 77.
    Some design issues • Static vs dynamic • Traits, Mix-ins • AOP, annotations (e.g. Qi4J) • Problems: schizophrenia DCI 19 Wednesday, April 20, 2011 19
  • 78.
    Some design issues • Static vs dynamic • Traits, Mix-ins • AOP, annotations (e.g. Qi4J) • Problems: schizophrenia • Which is the identity of an object that becomes a cluster of roles DCI 19 Wednesday, April 20, 2011 19
  • 79.
    Some design issues • Static vs dynamic • Traits, Mix-ins • AOP, annotations (e.g. Qi4J) • Problems: schizophrenia • Which is the identity of an object that becomes a cluster of roles • Partly solved by the clear separation object (stateful) / role (stateless) DCI 19 Wednesday, April 20, 2011 19
  • 80.
    Some design issues • Static vs dynamic • Traits, Mix-ins • AOP, annotations (e.g. Qi4J) • Problems: schizophrenia • Which is the identity of an object that becomes a cluster of roles • Partly solved by the clear separation object (stateful) / role (stateless) • What about equals() / hashcode()? DCI 19 Wednesday, April 20, 2011 19
  • 81.
    Some design issues • Static vs dynamic • Traits, Mix-ins • AOP, annotations (e.g. Qi4J) • Problems: schizophrenia • Which is the identity of an object that becomes a cluster of roles • Partly solved by the clear separation object (stateful) / role (stateless) • What about equals() / hashcode()? • Problem: anemic objects DCI 19 Wednesday, April 20, 2011 19
  • 82.
    Some design issues • Static vs dynamic • Traits, Mix-ins • AOP, annotations (e.g. Qi4J) • Problems: schizophrenia • Which is the identity of an object that becomes a cluster of roles • Partly solved by the clear separation object (stateful) / role (stateless) • What about equals() / hashcode()? • Problem: anemic objects • Really a problem in this perspective? DCI 19 Wednesday, April 20, 2011 19
  • 83.
    Designing with DCI DCI 20 Wednesday, April 20, 2011 20
  • 84.
    Designing with DCI • First, acknowledge that DCI is a best practice DCI 20 Wednesday, April 20, 2011 20
  • 85.
    Designing with DCI • First, acknowledge that DCI is a best practice • Some languages can fit better than others DCI 20 Wednesday, April 20, 2011 20
  • 86.
    Designing with DCI • First, acknowledge that DCI is a best practice • Some languages can fit better than others • Frameworks might help... but they force a new nature DCI 20 Wednesday, April 20, 2011 20
  • 87.
    Designing with DCI • First, acknowledge that DCI is a best practice • Some languages can fit better than others • Frameworks might help... but they force a new nature • My point: DCI must be addressed in design DCI 20 Wednesday, April 20, 2011 20
  • 88.
    Some UI-oriented examples Wednesday, April 20, 2011 21
  • 89.
    NodesExample 1 • Static role implementation • Introduce some generic, (G)UI oriented roles • NetBeans Platform’s Lookup based implementation DCI 22 Wednesday, April 20, 2011 22
  • 90.
    NodesExample 2 • Dynamically replacing roles with decorators DCI 23 Wednesday, April 20, 2011 23
  • 91.
    NodesExample 4 • Adding contextual Actions and ToolTips DCI 24 Wednesday, April 20, 2011 24
  • 92.
    NodesExample 5 • Removing UI dependencied DCI 25 Wednesday, April 20, 2011 25
  • 93.
    NodesExample 6 • Injecting roles from the Context DCI 26 Wednesday, April 20, 2011 26
  • 94.
    NodesExample 7 • Injecting Roles in function of the Context DCI 27 Wednesday, April 20, 2011 27
  • 95.
    Abstracting and sweetening Wednesday, April 20, 2011 28
  • 96.
    Abstracting and sweetening • Would be nice to be technology independent • Would be nice to have some syntactic sugar DCI 29 Wednesday, April 20, 2011 29
  • 97.
    as() DCI 30 Wednesday, April 20, 2011 30
  • 98.
    as() • From Role role = object.getLookup().lookup(Role.class) ... DCI 30 Wednesday, April 20, 2011 30
  • 99.
    as() • From Role role = object.getLookup().lookup(Role.class) ... • ... to Role role = object.as(Role); DCI 30 Wednesday, April 20, 2011 30
  • 100.
    as() • From Role role = object.getLookup().lookup(Role.class) ... • ... to Role role = object.as(Role); • As a wrapper around Lookup DCI 30 Wednesday, April 20, 2011 30
  • 101.
    as() • From Role role = object.getLookup().lookup(Role.class) ... • ... to Role role = object.as(Role); • As a wrapper around Lookup • With annotations and Lombok DCI 30 Wednesday, April 20, 2011 30
  • 102.
    as() • From Role role = object.getLookup().lookup(Role.class) ... • ... to Role role = object.as(Role); • As a wrapper around Lookup • @AsCapable With annotations and Lombok public class MyObject { @Role private Role1 r1 = new Role1(); @Role // lazy private Provider<Role> r2 = ...; DCI } 30 Wednesday, April 20, 2011 30
  • 103.
    Q &A • Question Time DCI 31 Wednesday, April 20, 2011 31