SlideShare a Scribd company logo
1 of 103
Download to read offline
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

More Related Content

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

Salvatore_Orlando
Salvatore_OrlandoSalvatore_Orlando
Salvatore_Orlando
yaevents
 
Salvatore Orlando "Mining query logs to improve web search engines' operations"
Salvatore Orlando "Mining query logs to improve web search engines' operations"Salvatore Orlando "Mining query logs to improve web search engines' operations"
Salvatore Orlando "Mining query logs to improve web search engines' operations"
Yandex
 
ECM Meets the Semantic Web - Nuxeo World 2011
ECM Meets the Semantic Web - Nuxeo World 2011ECM Meets the Semantic Web - Nuxeo World 2011
ECM Meets the Semantic Web - Nuxeo World 2011
Stefane Fermigier
 
[INSIGHT OUT 2011] A13 fusion applications, a simple look at the architecture...
[INSIGHT OUT 2011] A13 fusion applications, a simple look at the architecture...[INSIGHT OUT 2011] A13 fusion applications, a simple look at the architecture...
[INSIGHT OUT 2011] A13 fusion applications, a simple look at the architecture...
Insight Technology, Inc.
 
[INSIGHT OUT 2011] A13 fusion applications, a simple look at the architecture...
[INSIGHT OUT 2011] A13 fusion applications, a simple look at the architecture...[INSIGHT OUT 2011] A13 fusion applications, a simple look at the architecture...
[INSIGHT OUT 2011] A13 fusion applications, a simple look at the architecture...
Insight Technology, Inc.
 
JISC Digital Preservation: Current & Future Work by Neil Grindley
JISC Digital Preservation: Current & Future Work by Neil GrindleyJISC Digital Preservation: Current & Future Work by Neil Grindley
JISC Digital Preservation: Current & Future Work by Neil Grindley
Jisc
 
PLM Innovation Congress 2011: PLM and Engineering Software Trends
PLM Innovation Congress 2011: PLM and Engineering Software Trends PLM Innovation Congress 2011: PLM and Engineering Software Trends
PLM Innovation Congress 2011: PLM and Engineering Software Trends
Oleg Shilovitsky
 

Similar to DCI - Data, Context and Interaction @ Jug Genova April 2011 (20)

DCI - Data, Context and Interaction @ Jug Lugano May 2011
DCI - Data, Context and Interaction @ Jug Lugano May 2011 DCI - Data, Context and Interaction @ Jug Lugano May 2011
DCI - Data, Context and Interaction @ Jug Lugano May 2011
 
Salvatore_Orlando
Salvatore_OrlandoSalvatore_Orlando
Salvatore_Orlando
 
Salvatore Orlando "Mining query logs to improve web search engines' operations"
Salvatore Orlando "Mining query logs to improve web search engines' operations"Salvatore Orlando "Mining query logs to improve web search engines' operations"
Salvatore Orlando "Mining query logs to improve web search engines' operations"
 
ECM Meets the Semantic Web - Nuxeo World 2011
ECM Meets the Semantic Web - Nuxeo World 2011ECM Meets the Semantic Web - Nuxeo World 2011
ECM Meets the Semantic Web - Nuxeo World 2011
 
A new world with cdi en
A new world with cdi enA new world with cdi en
A new world with cdi en
 
Geolinkeddata 07042011 1
Geolinkeddata 07042011 1Geolinkeddata 07042011 1
Geolinkeddata 07042011 1
 
GeoLinkedData
GeoLinkedDataGeoLinkedData
GeoLinkedData
 
eLearning Consortium 2.0i jan 2011 london
eLearning Consortium 2.0i jan 2011 londoneLearning Consortium 2.0i jan 2011 london
eLearning Consortium 2.0i jan 2011 london
 
[INSIGHT OUT 2011] A13 fusion applications, a simple look at the architecture...
[INSIGHT OUT 2011] A13 fusion applications, a simple look at the architecture...[INSIGHT OUT 2011] A13 fusion applications, a simple look at the architecture...
[INSIGHT OUT 2011] A13 fusion applications, a simple look at the architecture...
 
[INSIGHT OUT 2011] A13 fusion applications, a simple look at the architecture...
[INSIGHT OUT 2011] A13 fusion applications, a simple look at the architecture...[INSIGHT OUT 2011] A13 fusion applications, a simple look at the architecture...
[INSIGHT OUT 2011] A13 fusion applications, a simple look at the architecture...
 
JISC Digital Preservation: Current & Future Work by Neil Grindley
JISC Digital Preservation: Current & Future Work by Neil GrindleyJISC Digital Preservation: Current & Future Work by Neil Grindley
JISC Digital Preservation: Current & Future Work by Neil Grindley
 
NISO Webinar: October Two-Part Webinar: Managing Data for Scholarly Communica...
NISO Webinar: October Two-Part Webinar: Managing Data for Scholarly Communica...NISO Webinar: October Two-Part Webinar: Managing Data for Scholarly Communica...
NISO Webinar: October Two-Part Webinar: Managing Data for Scholarly Communica...
 
Building Scalable Systems: an asynchronous approach
Building Scalable Systems: an asynchronous approachBuilding Scalable Systems: an asynchronous approach
Building Scalable Systems: an asynchronous approach
 
Identifying and Responding to Emerging Technologies
Identifying and Responding to Emerging TechnologiesIdentifying and Responding to Emerging Technologies
Identifying and Responding to Emerging Technologies
 
APIs and URLs for Social TV
APIs and URLs for Social TVAPIs and URLs for Social TV
APIs and URLs for Social TV
 
PLM Innovation Congress 2011: PLM and Engineering Software Trends
PLM Innovation Congress 2011: PLM and Engineering Software Trends PLM Innovation Congress 2011: PLM and Engineering Software Trends
PLM Innovation Congress 2011: PLM and Engineering Software Trends
 
Digital Storytelling: Connecting Standards to Movie-Making
Digital Storytelling: Connecting Standards to Movie-MakingDigital Storytelling: Connecting Standards to Movie-Making
Digital Storytelling: Connecting Standards to Movie-Making
 
Fast Map Interaction without Flash
Fast Map Interaction without FlashFast Map Interaction without Flash
Fast Map Interaction without Flash
 
Apps for Italy - a4i
Apps for Italy - a4iApps for Italy - a4i
Apps for Italy - a4i
 
Dev+ops+org how we are including (almost) everyone
Dev+ops+org how we are including (almost) everyoneDev+ops+org how we are including (almost) everyone
Dev+ops+org how we are including (almost) everyone
 

More from Fabrizio Giudici

NOSQL also means RDF stores: an Android case study
NOSQL also means RDF stores: an Android case studyNOSQL also means RDF stores: an Android case study
NOSQL also means RDF stores: an Android case study
Fabrizio Giudici
 
Tools for an effective software factory
Tools for an effective software factoryTools for an effective software factory
Tools for an effective software factory
Fabrizio Giudici
 
Parallel Computing Scenarios and the new challenges for the Software Architect
Parallel Computing Scenarios  and the new challenges for the Software ArchitectParallel Computing Scenarios  and the new challenges for the Software Architect
Parallel Computing Scenarios and the new challenges for the Software Architect
Fabrizio Giudici
 
blueMarine a desktop app for the open source photographic workflow
blueMarine  a desktop app for the open source photographic workflowblueMarine  a desktop app for the open source photographic workflow
blueMarine a desktop app for the open source photographic workflow
Fabrizio Giudici
 
blueMarine photographic workflow with Java
blueMarine photographic workflow with JavablueMarine photographic workflow with Java
blueMarine photographic workflow with Java
Fabrizio Giudici
 
blueMarine Sailing with NetBeans Platform
blueMarine Sailing with NetBeans PlatformblueMarine Sailing with NetBeans Platform
blueMarine Sailing with NetBeans Platform
Fabrizio Giudici
 
NASA World Wind for Java API Overview
NASA World Wind for Java  API OverviewNASA World Wind for Java  API Overview
NASA World Wind for Java API Overview
Fabrizio Giudici
 
Rich Internet Applications con JavaFX e NetBeans
Rich Internet Applications  con JavaFX e NetBeans Rich Internet Applications  con JavaFX e NetBeans
Rich Internet Applications con JavaFX e NetBeans
Fabrizio Giudici
 
Web Development with Apache Struts 2
Web Development with  Apache Struts 2Web Development with  Apache Struts 2
Web Development with Apache Struts 2
Fabrizio Giudici
 
blueMarine Or Why You Should Really Ship Swing Applications
blueMarine  Or Why You Should Really Ship Swing  Applications blueMarine  Or Why You Should Really Ship Swing  Applications
blueMarine Or Why You Should Really Ship Swing Applications
Fabrizio Giudici
 
Designing a JavaFX Mobile application
Designing a JavaFX Mobile applicationDesigning a JavaFX Mobile application
Designing a JavaFX Mobile application
Fabrizio Giudici
 

More from Fabrizio Giudici (16)

Building Android apps with Maven
Building Android apps with MavenBuilding Android apps with Maven
Building Android apps with Maven
 
NOSQL also means RDF stores: an Android case study
NOSQL also means RDF stores: an Android case studyNOSQL also means RDF stores: an Android case study
NOSQL also means RDF stores: an Android case study
 
Netbeans+platform+maven
Netbeans+platform+mavenNetbeans+platform+maven
Netbeans+platform+maven
 
Tools for an effective software factory
Tools for an effective software factoryTools for an effective software factory
Tools for an effective software factory
 
Parallel Computing Scenarios and the new challenges for the Software Architect
Parallel Computing Scenarios  and the new challenges for the Software ArchitectParallel Computing Scenarios  and the new challenges for the Software Architect
Parallel Computing Scenarios and the new challenges for the Software Architect
 
blueMarine a desktop app for the open source photographic workflow
blueMarine  a desktop app for the open source photographic workflowblueMarine  a desktop app for the open source photographic workflow
blueMarine a desktop app for the open source photographic workflow
 
blueMarine photographic workflow with Java
blueMarine photographic workflow with JavablueMarine photographic workflow with Java
blueMarine photographic workflow with Java
 
blueMarine Sailing with NetBeans Platform
blueMarine Sailing with NetBeans PlatformblueMarine Sailing with NetBeans Platform
blueMarine Sailing with NetBeans Platform
 
NASA World Wind for Java API Overview
NASA World Wind for Java  API OverviewNASA World Wind for Java  API Overview
NASA World Wind for Java API Overview
 
Rich Internet Applications con JavaFX e NetBeans
Rich Internet Applications  con JavaFX e NetBeans Rich Internet Applications  con JavaFX e NetBeans
Rich Internet Applications con JavaFX e NetBeans
 
The VRC Project
The VRC ProjectThe VRC Project
The VRC Project
 
Web Development with Apache Struts 2
Web Development with  Apache Struts 2Web Development with  Apache Struts 2
Web Development with Apache Struts 2
 
blueMarine Or Why You Should Really Ship Swing Applications
blueMarine  Or Why You Should Really Ship Swing  Applications blueMarine  Or Why You Should Really Ship Swing  Applications
blueMarine Or Why You Should Really Ship Swing Applications
 
Designing a JavaFX Mobile application
Designing a JavaFX Mobile applicationDesigning a JavaFX Mobile application
Designing a JavaFX Mobile application
 
Android java fx-jme@jug-lugano
Android java fx-jme@jug-luganoAndroid java fx-jme@jug-lugano
Android java fx-jme@jug-lugano
 
Mercurial
MercurialMercurial
Mercurial
 

Recently uploaded

Recently uploaded (20)

Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 

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 - Basic Concepts Wednesday, April 20, 2011 10
  • 22. Data, Context and Interaction DCI 11 Wednesday, April 20, 2011 11
  • 23. Data, Context and Interaction • OOD best practice invented by Trygve Reenskaug DCI 11 Wednesday, April 20, 2011 11
  • 24. Data, Context and Interaction • OOD best practice invented by Trygve Reenskaug • The formalizer of MVC DCI 11 Wednesday, April 20, 2011 11
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 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 - Execution Model DCI 17 Wednesday, April 20, 2011 17
  • 66. DCI - Execution Model • The Context finds object participants DCI 17 Wednesday, April 20, 2011 17
  • 67. DCI - Execution Model • The Context finds object participants • Then, it assigns (injects?) roles to them DCI 17 Wednesday, April 20, 2011 17
  • 68. 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
  • 69. 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
  • 70. 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
  • 71. 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
  • 72. DCI - How to 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