• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
DCI - Data, Context and Interaction @ Jug Genova April 2011
 

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

on

  • 1,649 views

My personal take on the Data, Context and Interaction best practice.

My personal take on the Data, Context and Interaction best practice.

Statistics

Views

Total Views
1,649
Views on SlideShare
1,138
Embed Views
511

Actions

Likes
0
Downloads
14
Comments
0

2 Embeds 511

http://juggenova.wordpress.com 510
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • DCI Data, Context and Interaction Fabrizio Giudici, Senior Java Architect Tidalwave s.a.s - fabrizio.giudici@tidalwave.itWednesday, April 20, 2011 1
    • About the speaker DCI 2Wednesday, 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 2Wednesday, April 20, 2011 2
    • Agenda DCI 3Wednesday, April 20, 2011 3
    • Agenda • Two real world examples DCI 3Wednesday, April 20, 2011 3
    • Agenda • Two real world examples • DCI - Basic concepts DCI 3Wednesday, April 20, 2011 3
    • Agenda • Two real world examples • DCI - Basic concepts • DCI - How to implement? DCI 3Wednesday, April 20, 2011 3
    • Agenda • Two real world examples • DCI - Basic concepts • DCI - How to implement? • Some simple examples DCI 3Wednesday, April 20, 2011 3
    • Agenda • Two real world examples • DCI - Basic concepts • DCI - How to implement? • Some simple examples • Abstracting and sweetening DCI 3Wednesday, April 20, 2011 3
    • Two real world examplesWednesday, April 20, 2011 4
    • Shameless Plug DCI 5Wednesday, April 20, 2011 5
    • Shameless Plug • Exercises of Design - my design book... DCI 5Wednesday, April 20, 2011 5
    • Shameless Plug • Exercises of Design - my design book... • Just started! DCI 5Wednesday, April 20, 2011 5
    • Shameless Plug • Exercises of Design - my design book... • Just started! • http://exercisesofdesign.java.net DCI 5Wednesday, 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 6Wednesday, 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 6Wednesday, 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 6Wednesday, April 20, 2011 6
    • DCI 7Wednesday, 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 8Wednesday, April 20, 2011 8
    • DCI 9Wednesday, April 20, 2011 9
    • DCI - Basic ConceptsWednesday, April 20, 2011 10
    • Data, Context and Interaction DCI 11Wednesday, April 20, 2011 11
    • Data, Context and Interaction • OOD best practice invented by Trygve Reenskaug DCI 11Wednesday, April 20, 2011 11
    • Data, Context and Interaction • OOD best practice invented by Trygve Reenskaug • The formalizer of MVC DCI 11Wednesday, 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 11Wednesday, 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 11Wednesday, 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 11Wednesday, 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 11Wednesday, April 20, 2011 11
    • DCI - aims DCI 12Wednesday, April 20, 2011 12
    • DCI - aims • Improve readability of a OO system DCI 12Wednesday, April 20, 2011 12
    • DCI - aims • Improve readability of a OO system • Give system behaviour first-class status DCI 12Wednesday, 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 12Wednesday, 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 12Wednesday, 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 12Wednesday, 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 12Wednesday, 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 12Wednesday, April 20, 2011 12
    • DCI - Data DCI 13Wednesday, April 20, 2011 13
    • DCI - Data • What the system is DCI 13Wednesday, April 20, 2011 13
    • DCI - Data • What the system is • Relatively static with relations DCI 13Wednesday, April 20, 2011 13
    • DCI - Data • What the system is • Relatively static with relations • Domain structure implemented with “conventional” classes DCI 13Wednesday, 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 13Wednesday, 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 13Wednesday, 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 13Wednesday, 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 13Wednesday, April 20, 2011 13
    • DCI - Context (and Roles) DCI 14Wednesday, April 20, 2011 14
    • DCI - Context (and Roles) • Associated to a use case, user story, scenario, or algorithm DCI 14Wednesday, 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 14Wednesday, 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 14Wednesday, 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 14Wednesday, 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 14Wednesday, 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 14Wednesday, 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 14Wednesday, April 20, 2011 14
    • Quick terminology note DCI 15Wednesday, April 20, 2011 15
    • Quick terminology note • Methodless role: abstract role DCI 15Wednesday, April 20, 2011 15
    • Quick terminology note • Methodless role: abstract role • Interface, abstract class DCI 15Wednesday, April 20, 2011 15
    • Quick terminology note • Methodless role: abstract role • Interface, abstract class • Methodful role: concrete role DCI 15Wednesday, April 20, 2011 15
    • Quick terminology note • Methodless role: abstract role • Interface, abstract class • Methodful role: concrete role • Regular class DCI 15Wednesday, April 20, 2011 15
    • DCI - Interaction DCI 16Wednesday, April 20, 2011 16
    • DCI - Interaction • What the system does DCI 16Wednesday, April 20, 2011 16
    • DCI - Interaction • What the system does • Occurs among roles, which act as adapters to objects DCI 16Wednesday, 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 16Wednesday, 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 16Wednesday, 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 16Wednesday, 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 16Wednesday, April 20, 2011 16
    • DCI - Execution Model DCI 17Wednesday, April 20, 2011 17
    • DCI - Execution Model • The Context finds object participants DCI 17Wednesday, April 20, 2011 17
    • DCI - Execution Model • The Context finds object participants • Then, it assigns (injects?) roles to them DCI 17Wednesday, 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 17Wednesday, 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 17Wednesday, 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 17Wednesday, 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 17Wednesday, April 20, 2011 17
    • DCI - How to implement?Wednesday, April 20, 2011 18
    • Some design issues DCI 19Wednesday, April 20, 2011 19
    • Some design issues • Static vs dynamic DCI 19Wednesday, April 20, 2011 19
    • Some design issues • Static vs dynamic • Traits, Mix-ins DCI 19Wednesday, April 20, 2011 19
    • Some design issues • Static vs dynamic • Traits, Mix-ins • AOP, annotations (e.g. Qi4J) DCI 19Wednesday, April 20, 2011 19
    • Some design issues • Static vs dynamic • Traits, Mix-ins • AOP, annotations (e.g. Qi4J) • Problems: schizophrenia DCI 19Wednesday, 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 19Wednesday, 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 19Wednesday, 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 19Wednesday, 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 19Wednesday, 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 19Wednesday, April 20, 2011 19
    • Designing with DCI DCI 20Wednesday, April 20, 2011 20
    • Designing with DCI • First, acknowledge that DCI is a best practice DCI 20Wednesday, April 20, 2011 20
    • Designing with DCI • First, acknowledge that DCI is a best practice • Some languages can fit better than others DCI 20Wednesday, 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 20Wednesday, 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 20Wednesday, April 20, 2011 20
    • Some UI-oriented examplesWednesday, April 20, 2011 21
    • NodesExample 1 • Static role implementation • Introduce some generic, (G)UI oriented roles • NetBeans Platform’s Lookup based implementation DCI 22Wednesday, April 20, 2011 22
    • NodesExample 2 • Dynamically replacing roles with decorators DCI 23Wednesday, April 20, 2011 23
    • NodesExample 4 • Adding contextual Actions and ToolTips DCI 24Wednesday, April 20, 2011 24
    • NodesExample 5 • Removing UI dependencied DCI 25Wednesday, April 20, 2011 25
    • NodesExample 6 • Injecting roles from the Context DCI 26Wednesday, April 20, 2011 26
    • NodesExample 7 • Injecting Roles in function of the Context DCI 27Wednesday, April 20, 2011 27
    • Abstracting and sweeteningWednesday, April 20, 2011 28
    • Abstracting and sweetening • Would be nice to be technology independent • Would be nice to have some syntactic sugar DCI 29Wednesday, April 20, 2011 29
    • as() DCI 30Wednesday, April 20, 2011 30
    • as() • From Role role = object.getLookup().lookup(Role.class) ... DCI 30Wednesday, April 20, 2011 30
    • as() • From Role role = object.getLookup().lookup(Role.class) ... • ... to Role role = object.as(Role); DCI 30Wednesday, 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 30Wednesday, 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 30Wednesday, 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 } 30Wednesday, April 20, 2011 30
    • Q &A • Question Time DCI 31Wednesday, April 20, 2011 31