SlideShare une entreprise Scribd logo
1  sur  103
Télécharger pour lire hors ligne
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

Contenu connexe

Similaire à DCI - Data, Context and Interaction @ Jug Genova April 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
DCI - Data, Context and Interaction @ Jug Lugano May 2011 Fabrizio Giudici
 
Salvatore_Orlando
Salvatore_OrlandoSalvatore_Orlando
Salvatore_Orlandoyaevents
 
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 2011Stefane Fermigier
 
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 londonErwin Huang
 
[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 GrindleyJisc
 
Building Scalable Systems: an asynchronous approach
Building Scalable Systems: an asynchronous approachBuilding Scalable Systems: an asynchronous approach
Building Scalable Systems: an asynchronous approachTheo Schlossnagle
 
Identifying and Responding to Emerging Technologies
Identifying and Responding to Emerging TechnologiesIdentifying and Responding to Emerging Technologies
Identifying and Responding to Emerging Technologieslisbk
 
APIs and URLs for Social TV
APIs and URLs for Social TVAPIs and URLs for Social TV
APIs and URLs for Social TVDan Brickley
 
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
 
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-Makingleegrafton
 
Fast Map Interaction without Flash
Fast Map Interaction without FlashFast Map Interaction without Flash
Fast Map Interaction without FlashDevelopment Seed
 
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) everyonepswartout
 

Similaire à 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
 

Plus de Fabrizio Giudici

Building Android apps with Maven
Building Android apps with MavenBuilding Android apps with Maven
Building Android apps with MavenFabrizio 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 studyFabrizio Giudici
 
Tools for an effective software factory
Tools for an effective software factoryTools for an effective software factory
Tools for an effective software factoryFabrizio 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 ArchitectFabrizio 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 workflowFabrizio Giudici
 
blueMarine photographic workflow with Java
blueMarine photographic workflow with JavablueMarine photographic workflow with Java
blueMarine photographic workflow with JavaFabrizio Giudici
 
blueMarine Sailing with NetBeans Platform
blueMarine Sailing with NetBeans PlatformblueMarine Sailing with NetBeans Platform
blueMarine Sailing with NetBeans PlatformFabrizio 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 OverviewFabrizio 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 2Fabrizio 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 applicationFabrizio Giudici
 
Android java fx-jme@jug-lugano
Android java fx-jme@jug-luganoAndroid java fx-jme@jug-lugano
Android java fx-jme@jug-luganoFabrizio Giudici
 

Plus de 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
 

Dernier

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbuapidays
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...apidays
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
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 WorkerThousandEyes
 
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.pdfsudhanshuwaghmare1
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 

Dernier (20)

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
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
 
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
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 

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