SlideShare una empresa de Scribd logo
1 de 63
Descargar para leer sin conexión
Java Rich Internet
Application Patterns
Daniel Pfeifer, Bruno Schäffer – Canoo
Daniel Pfeifer, Bruno Schäffer – Canoo
                Java Rich Internet Application Patterns


                        Overview

• Rich Internet Architectures
• Presentation model
• Component factories
• Validation
• Accessing business logic




                                                          1
Daniel Pfeifer, Bruno Schäffer – Canoo
                       Java Rich Internet Application Patterns




• Company
   • Based in Basel / Switzerland
   • About 40 employees & contractors


• Business
   • Services:
       • RIA consulting
       • Custom Rich Internet & Web application development
   • Products:
       • Java RIA library
       • Web application testing




                                                                 2
Daniel Pfeifer, Bruno Schäffer – Canoo
                         Java Rich Internet Application Patterns

          Rich Fat               RIA           Rich Thin           HTML Thin
                                         Browser
                  Rich UI Execution Environment
Client
          Presentation         Presentation          Rich UI         HTML
             Logic                Logic              Engine          Engine

         Business Logic



                                                   Presentation    Presentation
                                                      Logic           Logic
Server
                                               Business Logic     Business Logic
                              Business Logic

                                                                      Data
                                                      Data
             Data                 Data



                                                                             3
Daniel Pfeifer, Bruno Schäffer – Canoo
                Java Rich Internet Application Patterns


        RIA – User Interaction Patterns

• Master / Detail view, two panel selector
• Instant enabling / disabling, responsive disclosure
• Type lookahead
• Instant validation (syntactical / semantic)
• Silent error handling
• Drag & Drop
• Multiple (synchronized) windows /views

                                                          4
Daniel Pfeifer, Bruno Schäffer – Canoo
                                     Java Rich Internet Application Patterns


                                 Separation of Concerns
        Model-View-Controller                        Model-PresentationModel-View-Controller

GUI-Component                                         GUI-Component
                        events                                              events
      View                          Controller              View                         Controller
                        update                                              update




                                                             sta




                                                                                            ge
       da




                                         ge
                 no




                                                                                           n

                                                                                         an
        ta




                                      an




                                                              te




                                                                                        tio
                   tifi




                                                                                       ch
           a




                                    ch




                                                                 a




                                                                                      ca
                       ca
            cc




                                                                   cc




                                                                                  tifi

                                                                                   te
                                    ta
               es

                         tio




                                                                     es




                                                                               sta
                                                                               no
                                 da
                            n
                  s




                                                                     s
                                                                          Presentation
                       Model
                                                                             Model
                                                                                          data
                                                               notification
                                                                                     access / change

                                                                             Model


                                                                                                 5
Daniel Pfeifer, Bruno Schäffer – Canoo
                      Java Rich Internet Application Patterns


                     Presentation Models
• Typical structure of GUI libraries:
    • Trees of component objects represent GUI
    • Event notification to react to user activity
    • E.g. GWT, SWT, Swing, ULC, ...

• Typical software layering:

          Presentation Logic


            Business Logic

    • This simple layering does not support modular GUI building
    • Presentation models help

                                                                   6
Daniel Pfeifer, Bruno Schäffer – Canoo
                     Java Rich Internet Application Patterns


          Qualities of Complex GUIs (1)
• Hierarchical component structures

• Hierarchy contains so-called application components (ACs)
   • Application-related, coarse-grained GUI elements
   • Consist of base components from GUI library
   • GUI developers invest in ACs
      • 1 AC ≅ 1 public (outer) class
      • Useful granularity for task assignments in team




                                                               7
Daniel Pfeifer, Bruno Schäffer – Canoo
      Java Rich Internet Application Patterns


Example: ACs of the Online Shop




                                                8
Daniel Pfeifer, Bruno Schäffer – Canoo
      Java Rich Internet Application Patterns


Example: ACs of the Online Shop




        AC
    Application

                                                9
Daniel Pfeifer, Bruno Schäffer – Canoo
                Java Rich Internet Application Patterns


          Example: ACs of the Online Shop

    AC
Undo / Redo




                                                          10
Daniel Pfeifer, Bruno Schäffer – Canoo
      Java Rich Internet Application Patterns


Example: ACs of the Online Shop




       AC
    Workspace

                                                11
Daniel Pfeifer, Bruno Schäffer – Canoo
       Java Rich Internet Application Patterns


Example: ACs of the Online Shop


      AC
    Product
    Catalog




                                                 12
Daniel Pfeifer, Bruno Schäffer – Canoo
      Java Rich Internet Application Patterns


Example: ACs of the Online Shop



                        AC
                      Product
                        List




                                                13
Daniel Pfeifer, Bruno Schäffer – Canoo
      Java Rich Internet Application Patterns


Example: ACs of the Online Shop




                         AC
                       Product
                       Details



                                                14
Daniel Pfeifer, Bruno Schäffer – Canoo
       Java Rich Internet Application Patterns


Example: ACs of the Online Shop




      AC
   Shopping
     Cart



                                                 15
Daniel Pfeifer, Bruno Schäffer – Canoo
                    Java Rich Internet Application Patterns


                        Resulting AC Tree

                        Application



          Undo / Redo             Workspace



Product Catalog          Product List         Product Details   Shopping Cart




                                                                       16
Daniel Pfeifer, Bruno Schäffer – Canoo
                   Java Rich Internet Application Patterns


          Qualities of Complex GUIs (2)
• GUIs allow for redundant access to system parts
   • Different ACs display shared state


• The MVC pattern synchronizes ACs
   • Common state is represented by a separate object – the model
   • ACs trigger and observe model changes
     and update themselves accordingly




                                                             17
Daniel Pfeifer, Bruno Schäffer – Canoo
       Java Rich Internet Application Patterns


Demo: Example of Shared AC State




                                                 18
Daniel Pfeifer, Bruno Schäffer – Canoo
                  Java Rich Internet Application Patterns


                Issues with Pure MVC
• MVC only applied to special GUI components (e.g. tables)
• Model represents business state
   • Presentation state not modelled
• Models and ACs get mixed up
   • E.g.: AC Product List must reference AC Product Catalog in order
     to access the selected categories
• Result: ACs are not decoupled
   • E.g.: AC Product List cannot be developed / tested / used
     without AC Product Catalog


                                                                 19
Daniel Pfeifer, Bruno Schäffer – Canoo
                    Java Rich Internet Application Patterns


         Solution: The Presentation Model
• Idea: Fully apply MVC to every single AC!
• Leads to the presentation model as a separate software layer

• But:                               GUI            View              Controller
   • How to structure a              Layer
     related model?
   • What states to store
     in a model?                     Presentation
                                     Model
   • What further model qualities?                         Presentation
                                     Layer                    Model
   • How to structure ACs then?
   • What framework support
     is useful and necessary?        Business Logic           Model
                                     Layer

                                                                            20
Daniel Pfeifer, Bruno Schäffer – Canoo
                    Java Rich Internet Application Patterns


         Structure of Presentation Models
• ACs form trees
    • A root corresponds to a desktop window

• All (relevant) state of an AC is kept in a single model (instance), but
    • Models may share referenced submodels

• Presentation model instances form a directed acyclic graph (DAG)
    • Unique mapping from AC nodes to model graph nodes
      (typcically not injective or surjective)




                                                                  21
Daniel Pfeifer, Bruno Schäffer – Canoo
                      Java Rich Internet Application Patterns


      Example: AC Tree (for Online Shop)

                      Application



        Undo / Redo                 Workspace



Product Catalog        Product List             Product Details   Shopping Cart




                                                                         22
Daniel Pfeifer, Bruno Schäffer – Canoo
                          Java Rich Internet Application Patterns


        Example: AC Tree + Model Graph

                   Application Model
                        Application


   Undo / Redo Model             Workspace Model
       Undo / Redo                    Workspace



Catalog Model           Product List Model   Product Details Model
Product Catalog             Product List         Product Details      Shopping Cart



                                                                ...
     Category Selection Model         Product Selection Model
                  ...                          ...

                                                                             23
Daniel Pfeifer, Bruno Schäffer – Canoo
                         Java Rich Internet Application Patterns


                Example: Model Graph Only
                                                         In reality:
                  Application Model
                                                         • 9 AC classes
                                                         • 14 model classes
   Undo / Redo Model            Workspace Model



Catalog Model          Product List Model   Product Details Model



                                                               ...
    Category Selection Model         Product Selection Model
                 ...                          ...

                                                                      24
Daniel Pfeifer, Bruno Schäffer – Canoo
                        Java Rich Internet Application Patterns


            States in Presentation Models
• Only mutable GUI states must be reflected, e.g.
   • A button‘s background color is (typically) immutable
   • Selection of a check box is (typically) mutable
• Abstracting state model, e.g.
   • Current windows size is (typically) irrelevant (handled by layout man.)
   • Selection of check box is relevant
• State representation boils down to
   • Primitive values for simple GUI states, e.g.
       • A boolean for checkbox selection
   • Submodel for complex ones, e.g.
       • For a list of selected elements



                                                                      25
Daniel Pfeifer, Bruno Schäffer – Canoo
                   Java Rich Internet Application Patterns


        Further Qualities of Pres. Models
• Model state must be fully observable
   • Via event notification

• An AC observes the mapped model and updates itself
  accordingly (MVC)

• When a model is initially bound to an AC it must
  synchronize its entire state with the AC
   • The model triggers a set of events to completely sync the AC


                                                              26
Daniel Pfeifer, Bruno Schäffer – Canoo
                  Java Rich Internet Application Patterns


                    Structure of ACs
• AC obtains the mapped model at construction time
• ACs implement 3 parts:
   • Code to build its GUI subtree from base components
   • Controller to propagate base component changes to the
     presentation model
   • Controller to propagate model changes to base components

• Two-way state update between an AC and its model



                                                            27
Daniel Pfeifer, Bruno Schäffer – Canoo
   Java Rich Internet Application Patterns


Example: Two-Way Update


                                                Category
                                             Selection Model

                                         PCs
                                         PC Accessories
                                         Workstations




                                                      28
Daniel Pfeifer, Bruno Schäffer – Canoo
   Java Rich Internet Application Patterns


Example: Two-Way Update


                                                Category
                                             Selection Model

                                         PCs
                                         PC Accessories
                                         Workstations




                                                      29
Daniel Pfeifer, Bruno Schäffer – Canoo
   Java Rich Internet Application Patterns


Example: Two-Way Update


                                                Category
                                             Selection Model

                                         PCs
                                         PC Accessories
                                         Workstations
  Click!




                                                      30
Daniel Pfeifer, Bruno Schäffer – Canoo
   Java Rich Internet Application Patterns


Example: Two-Way Update


                                                Category
                                             Selection Model

                                         PCs
                                         PC Accessories
                                         Workstations




                                                      31
Daniel Pfeifer, Bruno Schäffer – Canoo
   Java Rich Internet Application Patterns


Example: Two-Way Update


                                                Category
                                             Selection Model
                  Controller 1 updates
                    selection model      PCs
                                         PC Accessories
                                         Workstations




                                                      32
Daniel Pfeifer, Bruno Schäffer – Canoo
   Java Rich Internet Application Patterns


Example: Two-Way Update


                                                Category
                                             Selection Model

                                         Entry Servers -19‘‘




                                                      33
Daniel Pfeifer, Bruno Schäffer – Canoo
   Java Rich Internet Application Patterns


Example: Two-Way Update


                                                Category
                    Controller 2 updates     Selection Model
                      dependent ACs
                                           Entry Servers -19‘‘




                                                       34
Daniel Pfeifer, Bruno Schäffer – Canoo
   Java Rich Internet Application Patterns


Example: Two-Way Update


                                                Category
                                             Selection Model

                                         Entry Servers -19‘‘




                                                      35
Daniel Pfeifer, Bruno Schäffer – Canoo
                     Java Rich Internet Application Patterns


                    Framework Support
• A framework is useful!
• Templates for model structures:
   • To ease / standardize implementation of models
      • Abstract super classes / interfaces for models
      • List models, undo / redo models, ...

• Templates for ACs
   • Abstract classes with standard functionality supporting
      • I18N
      • Factory methods for base components
      • Factory methods for controllers



                                                               36
Daniel Pfeifer, Bruno Schäffer – Canoo
                     Java Rich Internet Application Patterns


             Pros & Cons for Developers
• Cons:
   • Extra work for designing / implementing presentation layer
   • Extra work for additional controllers

• Pros:
   •   ACs can be implemented / tested / used independently
   •   Very uniform GUI code     eases team work and maintenance
   •   Undo / redo almost for free
   •   Dynamic locale changes very easy (via locale model)
   •   Easier to exchange GUI library
   •   Potentially cleaner business layer



                                                                   37
Daniel Pfeifer, Bruno Schäffer – Canoo
                  Java Rich Internet Application Patterns


                  Improved Testability

                       GUI Layer    Jemmy / Webtest :
                                       AC + Model
              Presentation Model Layer
     Junit Tests:
    Pres. Models +
   Business Objects Business Layer


• Independent testability of ACs and models
   • Freely choose width of test (according to granularity of ACs)
   • Test a lot without GUI (less Jemmy and Webtest)
   • Test a lot without DB layer (dummy models or business objs.)

                                                               38
Daniel Pfeifer, Bruno Schäffer – Canoo
                Java Rich Internet Application Patterns


            What Else Do We Need?
• GUI component creation

• User input validation

• Interacting with business logic




                                                          39
Daniel Pfeifer, Bruno Schäffer – Canoo
                  Java Rich Internet Application Patterns


                Component Factories
• Form components don’t map well to GUI components


                                                      Text Field (read only)
                            Error Label      Tooltip
        Label   Text Field (restricted to integer 1-9999, format: ###0)


• GUI components are still too low-level
• Consistency is hard to achieve
• Changes are a nightmare

                                                                               40
Daniel Pfeifer, Bruno Schäffer – Canoo
                    Java Rich Internet Application Patterns


                  Component Factories
• Component factories can help a lot
   • Factorize guy creation code
   • Two levels:
      • Domain independent factory, e.g. createDateField()
      • Domain specific factory, e.g. createCustomerIdField()


• Keeping consistency is way easier
• Global changes are a breeze
• Builder pattern emulates optional parameters


                                                                41
Daniel Pfeifer, Bruno Schäffer – Canoo
                      Java Rich Internet Application Patterns


                               Validation
• Syntactic validation
   •   Can be handled by
   •   Component     component factory configures component
   •   Formatter    value objects
   •   Example
        • Date: correct format and data according to the Gregorian calendar


• Semantic validation
   • A lot more challenging!



                                                                              42
Daniel Pfeifer, Bruno Schäffer – Canoo
                      Java Rich Internet Application Patterns


                      Semantic Validation
• RIAs feature extensive semantic validation in the GUI
• Examples




• Challenges
    •   Semantic validation is intrinsic to the business logic layer
    •   Duplication of validation logic in presentation layer is expensive
    •   Delegating validation to the business logic layer is costly
    •   Semantic validation in the GUI needs subset but more
    •   How to communicate validation errors?
    •   Validation for RIA is both on the attribute and object level

                                                                             43
Daniel Pfeifer, Bruno Schäffer – Canoo
                        Java Rich Internet Application Patterns


                       Semantic Validation
• How to factorize semantic validation?
   • Business object validates itself
       • Is business object available in presentation layer?
       • Might only be a data transfer object
   • Validation class (e.g. Spring validator)
   • Descriptive validation (e.g. commons validator)
   • Rule-based validation

• Referential validation best done in the business layer
   • Requires service access
   • Can only be done in the presentation layer for small data sets

• Validation method allows to specify attribute to be validated

                                                                      44
Daniel Pfeifer, Bruno Schäffer – Canoo
                      Java Rich Internet Application Patterns


                      Semantic Validation
• How to communicate validation errors?

• Exceptions
   •   Validation errors can be modelled by the exception
   •   Flexibility to catch the validation error along the call stack
   •   Any property setter can just throw the exception
   •   Are exceptions the right way to signal common events?

• Error objects
   • Error object accumulates all validation errors
   • Must be passed as an additional parameter to the validator
   • Direct caller must handle it or pass it on

                                                                        45
Daniel Pfeifer, Bruno Schäffer – Canoo
                  Java Rich Internet Application Patterns


             Accessing Business Logic
• Kind of object the presentation logic should work with?
   • Business objects?
   • Data transfer objecs?


• Business object model vs. services?

• Service granularity?



                                                            46
Daniel Pfeifer, Bruno Schäffer – Canoo
                          Java Rich Internet Application Patterns


                            Business Objects
• Pros
   • No need to define data container for presentation logic
   • Reuse validation logic

• Cons
   • Extends transaction context into presentation layer
         • Detach objects from the DB!
   • Lack of encapsulation
         • Reveals more business logic than is needed
   • Transparent lazy loading might be error-prone
         • Error-prone (if references are resolved in a detached object)
         • Navigational access might lead to unintended lazy loading
              • Must ensure that all required objects are loaded



                                                                           47
Daniel Pfeifer, Bruno Schäffer – Canoo
                    Java Rich Internet Application Patterns


                 Data Transfer Objects
• Pros
  • Decouples from business logic
  • Deals with incomplete object graphs


• Cons
  • DTOs are dumb (e.g. no validation)
  • DTOs have to be implemented / generated / maintained
  • DTOs implemented as maps
     • More convenient to implement and maintain
     • Less convenient to access and loss of type safety


                                                              48
Daniel Pfeifer, Bruno Schäffer – Canoo
                 Java Rich Internet Application Patterns


               Service Data Objects
• Addresses common problems of service data

•   Disconnected data graphs
•   Logging changes to the data graph
•   Generic and statically typed access to properties
•   Metadata available
•   Frameworks and tools included
•   Independent of environment (programming language)


                                                           49
Daniel Pfeifer, Bruno Schäffer – Canoo
                        Java Rich Internet Application Patterns


                        Service Granularity
Client                                        Client
                                                       UI Rendering
         UI Rendering
                                                       Presentation
                                                          Logic
                Presentation Data

Server
                                                                   Business Data
         Presentation
            Logic


                   Business Data
                                              Server

          Business                                      Business
           Logic                                         Logic


                                                                            50
Daniel Pfeifer, Bruno Schäffer – Canoo
                      Java Rich Internet Application Patterns


                      Service Granularity
• Rich Internet Applications
   • Need more frequent access to data
       • Validation, interaction patterns such as drill down
   • Remote clients cannot afford to transfer lots of data

• Coarse granularity promotes reusability

• Solutions:
   • Implement adapter services tailored to presentation needs
   • Generic DTOs & filter


                                                                 51
Daniel Pfeifer, Bruno Schäffer – Canoo
                        Java Rich Internet Application Patterns


              Business Service – Caching
• Rich Internet Applications
   • Need more frequent access to data
       • Validation, interaction patterns such as drill down, master-detail
   • Try to avoid displaying stale data

• Server-side caching
   • More useful for server-side presentation logic
   • Easier to avoid stale data
   • Cache can be shared
• Client-side caching
   • Stale data can hardly be avoided
   • More cache memory available


                                                                              52
Daniel Pfeifer, Bruno Schäffer – Canoo
                  Java Rich Internet Application Patterns


                Handling Service Data
• Service data format may be inconvenient
   • String is very common for all sorts of types
   • Different services may return different formats for the same
     type (even in the same company!)


• Consider using value objects
   • Fundamental abstractions in a business domain
   • Examples: monetary amount, account number, entry date




                                                               53
Daniel Pfeifer, Bruno Schäffer – Canoo
                      Java Rich Internet Application Patterns


                           Value Objects
• Key properties:
   •   Values are abstractions of a problem domain
   •   Values have no lifecycle
   •   Values have no alterable state
   •   Values are referentially transparent (i.e. no side effects)


• Implementation:
   •   Internal representation (logical or canonical format)
   •   Deals with invalid and unknown values
   •   Implements getValue(), toString(), equals(), hashCode(), isValid()
   •   Factory method and private constructor

                                                                        54
Daniel Pfeifer, Bruno Schäffer – Canoo
                  Java Rich Internet Application Patterns


        Infrastructure for Value Objects
• Formatter
  • Formats value object (according to locale)
  • Validates (incomplete) string syntactically
  • Parses string and converts it to logical format


• Converter
  • Converts proprietary format to logical format and vice versa
  • Used for service data which does not conform
    to the logical format.



                                                              55
Daniel Pfeifer, Bruno Schäffer – Canoo
                    Java Rich Internet Application Patterns


                           Summary
• POWAs (Plain Old Web Applications)
   • Easy on developers but a hassle for users
   • Server-side presentation layer simplifies a lot


• RIAs
   •   A lot more challenging to developers
   •   Presentation model is the pivotal concept
   •   Additional infrastructure required
   •   Partitioning has quite some impact


                                                              56
Daniel Pfeifer, Bruno Schäffer – Canoo
                         Java Rich Internet Application Patterns


                          Resources / Links
•   Presentation model:
    http://www.martinfowler.com/eaaDev/PresentationModel.html
    http://http://www.jgoodies.com/articles/patterns-and-binding.pdf

•   Service Data Objects:
    http://www.bea.com/dev2dev/assets/sdo/Next-Gen-Data-Programming-Whitepaper.pdf

•   Value Objects:
    http://www.riehle.org/computer-science/research/2006/plop-2006-value-object.pdf

•   Validation:
    https://validation.dev.java.net/
    http://http://www.springframework.org/docs/reference/validation.html




                                                                                57
Backup Slides

For difficult and mean questions
Daniel Pfeifer, Bruno Schäffer – Canoo
                       Java Rich Internet Application Patterns


Event Broadcasting Problems and Solutions
                                     Component
                    1. GUI Event
                                                            2. Method Call
                                    Listener for A
      Component A
                                        Model        3. Model Event
                                    Listener for A
                                                                      Common
                                                                       Model
                                     Component
                     5. GUI Event
                                    Listener for B
                                                         3. Model Event
      Component B
                                        Model
                                    Listener for B
               4. Method Call


• Protectors prevent cyclic event flow
• Implemented as dynamic proxies on listener interfaces

                                                                               59
Daniel Pfeifer, Bruno Schäffer – Canoo
                            Java Rich Internet Application Patterns


                           The Model Interface

public interface Model {
  // Common environment for all models:
  public ModelContext getModelContext();
  // Basic enabling of being observable:
  public void addPropertyChangeListener(String propertyName,
                          PropertyChangeListener listener);
  public void addPropertyChangeListener(PropertyChangeListener listener);
  public void removePropertyChangeListener(String propertyName,
                            PropertyChangeListener listener);
  public void removePropertyChangeListener(PropertyChangeListener listener);
  // To visit model graph (required for synchronization):
  public void visit(ModelVisitor modelVisitor);
  // To initially synchronize dependend Acs:
  public void synchronize();
  ...
}




                                                                               60
Daniel Pfeifer, Bruno Schäffer – Canoo
                               Java Rich Internet Application Patterns


                      Pres. Model Code Sample

     public class SimpleModel extends GenericPropertyModel {
       public static final String MY_FLAG_PROPERTY = "myFlag";

         public SimpleModel(ModelContext modelContext) {
           super(modelContext);
           defineProperty(MY_FLAG_PROPERTY, boolean.class);
         }

         public boolean isMyFlag() {
           return (Boolean)getProperty(MY_FLAG_PROPERTY);
         }

         public void setMyFlag(boolean value) {
           setProperty(MY_FLAG_PROPERTY, value);
         }
     }




• A model with a single boolean state
   • Observation and synchronization feature covered in super class

                                                                         61
Daniel Pfeifer, Bruno Schäffer – Canoo
                          Java Rich Internet Application Patterns


            Code Sample: Associate AC
public class SimpleAK extends ModeledJComponent<SimpleModel> {
  private JCheckBox checkBox;

    public SimpleAK(SimpleModel model) {
      super(model);
    }

    protected JComponent createComponent(SimpleModel model, ...) {
      return checkBox = new JCheckBox("My Flag");
    }

    protected void createComponentChangeListeners(final SimpleModel model, ...) {
      checkBox.addChangeListener(new ChangeListener() {
          public void stateChanged(ChangeEvent e) {
            model.setMyFlag(checkBox.isSelected());
          }
      });
    }

    protected void createModelChangeListeners(SimpleModel model, ...) {
      model.addPropertyChangeListener(new PropertyChangeListener() {
          public void propertyChange(PropertyChangeEvent evt) {
            checkBox.setSelected((Boolean)evt.getNewValue());
          }
      });
    }
                                                                                    62
}

Más contenido relacionado

Similar a Java Rich Internet Application Patterns Guide

20110507 Implementing Continuous Deployment
20110507 Implementing Continuous Deployment20110507 Implementing Continuous Deployment
20110507 Implementing Continuous DeploymentXebiaLabs
 
Typical project planning for implementation of hospital Pharmacy software pac...
Typical project planning for implementation of hospital Pharmacy software pac...Typical project planning for implementation of hospital Pharmacy software pac...
Typical project planning for implementation of hospital Pharmacy software pac...Jacques Timmermans
 
As reais razões do porque eu devo ser Ágil - Agile Tour São Paulo
As reais razões do porque eu devo ser Ágil - Agile Tour São PauloAs reais razões do porque eu devo ser Ágil - Agile Tour São Paulo
As reais razões do porque eu devo ser Ágil - Agile Tour São PauloMarcelo Park
 
As reais razões do porque eu devo ser Ágil - Agile Tour São Paulo
As reais razões do porque eu devo ser Ágil - Agile Tour São PauloAs reais razões do porque eu devo ser Ágil - Agile Tour São Paulo
As reais razões do porque eu devo ser Ágil - Agile Tour São PauloPlataformatec
 
FinCap Solutions Brochure
FinCap  Solutions BrochureFinCap  Solutions Brochure
FinCap Solutions BrochureCFPuser
 
Ovp Introduction Presentation
Ovp Introduction PresentationOvp Introduction Presentation
Ovp Introduction Presentationsimon56
 
Linked in 4eme table ronde 20120601
Linked in 4eme table ronde 20120601Linked in 4eme table ronde 20120601
Linked in 4eme table ronde 20120601Dario Mangano
 
Towards a comprehensive model of the digital economy by Ismael Peña-Lopez
Towards a comprehensive model of the digital economy by Ismael Peña-LopezTowards a comprehensive model of the digital economy by Ismael Peña-Lopez
Towards a comprehensive model of the digital economy by Ismael Peña-Lopezi2tic
 
Content Archaeology (Keynote for DocTrain West March 2009)
Content Archaeology (Keynote for DocTrain West March 2009)Content Archaeology (Keynote for DocTrain West March 2009)
Content Archaeology (Keynote for DocTrain West March 2009)Joe Gollner
 
Brochure ascen flow_en_110324
Brochure ascen flow_en_110324Brochure ascen flow_en_110324
Brochure ascen flow_en_110324Galen Hsieh
 
SAP Inside Track Sao Paulo '09 Keynote
SAP Inside Track Sao Paulo '09 KeynoteSAP Inside Track Sao Paulo '09 Keynote
SAP Inside Track Sao Paulo '09 KeynoteMarcelo Ramos
 
Final_D4 recommendation emenu_development
Final_D4 recommendation emenu_developmentFinal_D4 recommendation emenu_development
Final_D4 recommendation emenu_developmentTraitet Thepbandansuk
 
Business Perspectives on Internationalization (i18n)
Business Perspectives on Internationalization (i18n)Business Perspectives on Internationalization (i18n)
Business Perspectives on Internationalization (i18n)Lingoport (www.lingoport.com)
 
Net India Company Profile
Net India   Company ProfileNet India   Company Profile
Net India Company Profilekoffeemedia
 
Alfresco Day Madrid - John Newton - Keynote
Alfresco Day Madrid - John Newton - KeynoteAlfresco Day Madrid - John Newton - Keynote
Alfresco Day Madrid - John Newton - KeynoteToni de la Fuente
 
Alfresco day madrid john newton - key note
Alfresco day madrid   john newton - key noteAlfresco day madrid   john newton - key note
Alfresco day madrid john newton - key noteAlfresco Software
 
Agile Is From Mars Usability is From Venus
Agile Is From Mars Usability is From VenusAgile Is From Mars Usability is From Venus
Agile Is From Mars Usability is From VenusTeale Shapcott
 

Similar a Java Rich Internet Application Patterns Guide (20)

20110507 Implementing Continuous Deployment
20110507 Implementing Continuous Deployment20110507 Implementing Continuous Deployment
20110507 Implementing Continuous Deployment
 
Typical project planning for implementation of hospital Pharmacy software pac...
Typical project planning for implementation of hospital Pharmacy software pac...Typical project planning for implementation of hospital Pharmacy software pac...
Typical project planning for implementation of hospital Pharmacy software pac...
 
As reais razões do porque eu devo ser Ágil - Agile Tour São Paulo
As reais razões do porque eu devo ser Ágil - Agile Tour São PauloAs reais razões do porque eu devo ser Ágil - Agile Tour São Paulo
As reais razões do porque eu devo ser Ágil - Agile Tour São Paulo
 
As reais razões do porque eu devo ser Ágil - Agile Tour São Paulo
As reais razões do porque eu devo ser Ágil - Agile Tour São PauloAs reais razões do porque eu devo ser Ágil - Agile Tour São Paulo
As reais razões do porque eu devo ser Ágil - Agile Tour São Paulo
 
FinCap Solutions Brochure
FinCap  Solutions BrochureFinCap  Solutions Brochure
FinCap Solutions Brochure
 
Ovp Introduction Presentation
Ovp Introduction PresentationOvp Introduction Presentation
Ovp Introduction Presentation
 
Linked in 4eme table ronde 20120601
Linked in 4eme table ronde 20120601Linked in 4eme table ronde 20120601
Linked in 4eme table ronde 20120601
 
Towards a comprehensive model of the digital economy by Ismael Peña-Lopez
Towards a comprehensive model of the digital economy by Ismael Peña-LopezTowards a comprehensive model of the digital economy by Ismael Peña-Lopez
Towards a comprehensive model of the digital economy by Ismael Peña-Lopez
 
Content Archaeology (Keynote for DocTrain West March 2009)
Content Archaeology (Keynote for DocTrain West March 2009)Content Archaeology (Keynote for DocTrain West March 2009)
Content Archaeology (Keynote for DocTrain West March 2009)
 
D4 recommendation emenu_development
D4 recommendation emenu_developmentD4 recommendation emenu_development
D4 recommendation emenu_development
 
Brochure ascen flow_en_110324
Brochure ascen flow_en_110324Brochure ascen flow_en_110324
Brochure ascen flow_en_110324
 
Sipoc
SipocSipoc
Sipoc
 
SAP Inside Track Sao Paulo '09 Keynote
SAP Inside Track Sao Paulo '09 KeynoteSAP Inside Track Sao Paulo '09 Keynote
SAP Inside Track Sao Paulo '09 Keynote
 
Final_D4 recommendation emenu_development
Final_D4 recommendation emenu_developmentFinal_D4 recommendation emenu_development
Final_D4 recommendation emenu_development
 
Business Perspectives on Internationalization (i18n)
Business Perspectives on Internationalization (i18n)Business Perspectives on Internationalization (i18n)
Business Perspectives on Internationalization (i18n)
 
Net India Company Profile
Net India   Company ProfileNet India   Company Profile
Net India Company Profile
 
Alfresco Day Madrid - John Newton - Keynote
Alfresco Day Madrid - John Newton - KeynoteAlfresco Day Madrid - John Newton - Keynote
Alfresco Day Madrid - John Newton - Keynote
 
Alfresco day madrid john newton - key note
Alfresco day madrid   john newton - key noteAlfresco day madrid   john newton - key note
Alfresco day madrid john newton - key note
 
D4 recommendation emenu_development
D4 recommendation emenu_developmentD4 recommendation emenu_development
D4 recommendation emenu_development
 
Agile Is From Mars Usability is From Venus
Agile Is From Mars Usability is From VenusAgile Is From Mars Usability is From Venus
Agile Is From Mars Usability is From Venus
 

Último

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
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 organizationRadu Cotescu
 
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...Neo4j
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
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?Antenna Manufacturer Coco
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
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
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
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 RobisonAnna Loughnan Colquhoun
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
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 2024The Digital Insurer
 
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
 
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
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
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
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 

Último (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
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
 
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...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
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?
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
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
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
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
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
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
 
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...
 
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)
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
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
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 

Java Rich Internet Application Patterns Guide

  • 1. Java Rich Internet Application Patterns Daniel Pfeifer, Bruno Schäffer – Canoo
  • 2. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Overview • Rich Internet Architectures • Presentation model • Component factories • Validation • Accessing business logic 1
  • 3. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns • Company • Based in Basel / Switzerland • About 40 employees & contractors • Business • Services: • RIA consulting • Custom Rich Internet & Web application development • Products: • Java RIA library • Web application testing 2
  • 4. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Rich Fat RIA Rich Thin HTML Thin Browser Rich UI Execution Environment Client Presentation Presentation Rich UI HTML Logic Logic Engine Engine Business Logic Presentation Presentation Logic Logic Server Business Logic Business Logic Business Logic Data Data Data Data 3
  • 5. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns RIA – User Interaction Patterns • Master / Detail view, two panel selector • Instant enabling / disabling, responsive disclosure • Type lookahead • Instant validation (syntactical / semantic) • Silent error handling • Drag & Drop • Multiple (synchronized) windows /views 4
  • 6. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Separation of Concerns Model-View-Controller Model-PresentationModel-View-Controller GUI-Component GUI-Component events events View Controller View Controller update update sta ge da ge no n an ta an te tio tifi ch a ch a ca ca cc cc tifi te ta es tio es sta no da n s s Presentation Model Model data notification access / change Model 5
  • 7. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Presentation Models • Typical structure of GUI libraries: • Trees of component objects represent GUI • Event notification to react to user activity • E.g. GWT, SWT, Swing, ULC, ... • Typical software layering: Presentation Logic Business Logic • This simple layering does not support modular GUI building • Presentation models help 6
  • 8. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Qualities of Complex GUIs (1) • Hierarchical component structures • Hierarchy contains so-called application components (ACs) • Application-related, coarse-grained GUI elements • Consist of base components from GUI library • GUI developers invest in ACs • 1 AC ≅ 1 public (outer) class • Useful granularity for task assignments in team 7
  • 9. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: ACs of the Online Shop 8
  • 10. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: ACs of the Online Shop AC Application 9
  • 11. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: ACs of the Online Shop AC Undo / Redo 10
  • 12. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: ACs of the Online Shop AC Workspace 11
  • 13. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: ACs of the Online Shop AC Product Catalog 12
  • 14. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: ACs of the Online Shop AC Product List 13
  • 15. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: ACs of the Online Shop AC Product Details 14
  • 16. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: ACs of the Online Shop AC Shopping Cart 15
  • 17. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Resulting AC Tree Application Undo / Redo Workspace Product Catalog Product List Product Details Shopping Cart 16
  • 18. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Qualities of Complex GUIs (2) • GUIs allow for redundant access to system parts • Different ACs display shared state • The MVC pattern synchronizes ACs • Common state is represented by a separate object – the model • ACs trigger and observe model changes and update themselves accordingly 17
  • 19. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Demo: Example of Shared AC State 18
  • 20. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Issues with Pure MVC • MVC only applied to special GUI components (e.g. tables) • Model represents business state • Presentation state not modelled • Models and ACs get mixed up • E.g.: AC Product List must reference AC Product Catalog in order to access the selected categories • Result: ACs are not decoupled • E.g.: AC Product List cannot be developed / tested / used without AC Product Catalog 19
  • 21. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Solution: The Presentation Model • Idea: Fully apply MVC to every single AC! • Leads to the presentation model as a separate software layer • But: GUI View Controller • How to structure a Layer related model? • What states to store in a model? Presentation Model • What further model qualities? Presentation Layer Model • How to structure ACs then? • What framework support is useful and necessary? Business Logic Model Layer 20
  • 22. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Structure of Presentation Models • ACs form trees • A root corresponds to a desktop window • All (relevant) state of an AC is kept in a single model (instance), but • Models may share referenced submodels • Presentation model instances form a directed acyclic graph (DAG) • Unique mapping from AC nodes to model graph nodes (typcically not injective or surjective) 21
  • 23. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: AC Tree (for Online Shop) Application Undo / Redo Workspace Product Catalog Product List Product Details Shopping Cart 22
  • 24. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: AC Tree + Model Graph Application Model Application Undo / Redo Model Workspace Model Undo / Redo Workspace Catalog Model Product List Model Product Details Model Product Catalog Product List Product Details Shopping Cart ... Category Selection Model Product Selection Model ... ... 23
  • 25. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: Model Graph Only In reality: Application Model • 9 AC classes • 14 model classes Undo / Redo Model Workspace Model Catalog Model Product List Model Product Details Model ... Category Selection Model Product Selection Model ... ... 24
  • 26. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns States in Presentation Models • Only mutable GUI states must be reflected, e.g. • A button‘s background color is (typically) immutable • Selection of a check box is (typically) mutable • Abstracting state model, e.g. • Current windows size is (typically) irrelevant (handled by layout man.) • Selection of check box is relevant • State representation boils down to • Primitive values for simple GUI states, e.g. • A boolean for checkbox selection • Submodel for complex ones, e.g. • For a list of selected elements 25
  • 27. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Further Qualities of Pres. Models • Model state must be fully observable • Via event notification • An AC observes the mapped model and updates itself accordingly (MVC) • When a model is initially bound to an AC it must synchronize its entire state with the AC • The model triggers a set of events to completely sync the AC 26
  • 28. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Structure of ACs • AC obtains the mapped model at construction time • ACs implement 3 parts: • Code to build its GUI subtree from base components • Controller to propagate base component changes to the presentation model • Controller to propagate model changes to base components • Two-way state update between an AC and its model 27
  • 29. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: Two-Way Update Category Selection Model PCs PC Accessories Workstations 28
  • 30. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: Two-Way Update Category Selection Model PCs PC Accessories Workstations 29
  • 31. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: Two-Way Update Category Selection Model PCs PC Accessories Workstations Click! 30
  • 32. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: Two-Way Update Category Selection Model PCs PC Accessories Workstations 31
  • 33. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: Two-Way Update Category Selection Model Controller 1 updates selection model PCs PC Accessories Workstations 32
  • 34. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: Two-Way Update Category Selection Model Entry Servers -19‘‘ 33
  • 35. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: Two-Way Update Category Controller 2 updates Selection Model dependent ACs Entry Servers -19‘‘ 34
  • 36. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Example: Two-Way Update Category Selection Model Entry Servers -19‘‘ 35
  • 37. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Framework Support • A framework is useful! • Templates for model structures: • To ease / standardize implementation of models • Abstract super classes / interfaces for models • List models, undo / redo models, ... • Templates for ACs • Abstract classes with standard functionality supporting • I18N • Factory methods for base components • Factory methods for controllers 36
  • 38. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Pros & Cons for Developers • Cons: • Extra work for designing / implementing presentation layer • Extra work for additional controllers • Pros: • ACs can be implemented / tested / used independently • Very uniform GUI code eases team work and maintenance • Undo / redo almost for free • Dynamic locale changes very easy (via locale model) • Easier to exchange GUI library • Potentially cleaner business layer 37
  • 39. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Improved Testability GUI Layer Jemmy / Webtest : AC + Model Presentation Model Layer Junit Tests: Pres. Models + Business Objects Business Layer • Independent testability of ACs and models • Freely choose width of test (according to granularity of ACs) • Test a lot without GUI (less Jemmy and Webtest) • Test a lot without DB layer (dummy models or business objs.) 38
  • 40. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns What Else Do We Need? • GUI component creation • User input validation • Interacting with business logic 39
  • 41. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Component Factories • Form components don’t map well to GUI components Text Field (read only) Error Label Tooltip Label Text Field (restricted to integer 1-9999, format: ###0) • GUI components are still too low-level • Consistency is hard to achieve • Changes are a nightmare 40
  • 42. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Component Factories • Component factories can help a lot • Factorize guy creation code • Two levels: • Domain independent factory, e.g. createDateField() • Domain specific factory, e.g. createCustomerIdField() • Keeping consistency is way easier • Global changes are a breeze • Builder pattern emulates optional parameters 41
  • 43. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Validation • Syntactic validation • Can be handled by • Component component factory configures component • Formatter value objects • Example • Date: correct format and data according to the Gregorian calendar • Semantic validation • A lot more challenging! 42
  • 44. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Semantic Validation • RIAs feature extensive semantic validation in the GUI • Examples • Challenges • Semantic validation is intrinsic to the business logic layer • Duplication of validation logic in presentation layer is expensive • Delegating validation to the business logic layer is costly • Semantic validation in the GUI needs subset but more • How to communicate validation errors? • Validation for RIA is both on the attribute and object level 43
  • 45. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Semantic Validation • How to factorize semantic validation? • Business object validates itself • Is business object available in presentation layer? • Might only be a data transfer object • Validation class (e.g. Spring validator) • Descriptive validation (e.g. commons validator) • Rule-based validation • Referential validation best done in the business layer • Requires service access • Can only be done in the presentation layer for small data sets • Validation method allows to specify attribute to be validated 44
  • 46. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Semantic Validation • How to communicate validation errors? • Exceptions • Validation errors can be modelled by the exception • Flexibility to catch the validation error along the call stack • Any property setter can just throw the exception • Are exceptions the right way to signal common events? • Error objects • Error object accumulates all validation errors • Must be passed as an additional parameter to the validator • Direct caller must handle it or pass it on 45
  • 47. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Accessing Business Logic • Kind of object the presentation logic should work with? • Business objects? • Data transfer objecs? • Business object model vs. services? • Service granularity? 46
  • 48. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Business Objects • Pros • No need to define data container for presentation logic • Reuse validation logic • Cons • Extends transaction context into presentation layer • Detach objects from the DB! • Lack of encapsulation • Reveals more business logic than is needed • Transparent lazy loading might be error-prone • Error-prone (if references are resolved in a detached object) • Navigational access might lead to unintended lazy loading • Must ensure that all required objects are loaded 47
  • 49. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Data Transfer Objects • Pros • Decouples from business logic • Deals with incomplete object graphs • Cons • DTOs are dumb (e.g. no validation) • DTOs have to be implemented / generated / maintained • DTOs implemented as maps • More convenient to implement and maintain • Less convenient to access and loss of type safety 48
  • 50. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Service Data Objects • Addresses common problems of service data • Disconnected data graphs • Logging changes to the data graph • Generic and statically typed access to properties • Metadata available • Frameworks and tools included • Independent of environment (programming language) 49
  • 51. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Service Granularity Client Client UI Rendering UI Rendering Presentation Logic Presentation Data Server Business Data Presentation Logic Business Data Server Business Business Logic Logic 50
  • 52. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Service Granularity • Rich Internet Applications • Need more frequent access to data • Validation, interaction patterns such as drill down • Remote clients cannot afford to transfer lots of data • Coarse granularity promotes reusability • Solutions: • Implement adapter services tailored to presentation needs • Generic DTOs & filter 51
  • 53. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Business Service – Caching • Rich Internet Applications • Need more frequent access to data • Validation, interaction patterns such as drill down, master-detail • Try to avoid displaying stale data • Server-side caching • More useful for server-side presentation logic • Easier to avoid stale data • Cache can be shared • Client-side caching • Stale data can hardly be avoided • More cache memory available 52
  • 54. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Handling Service Data • Service data format may be inconvenient • String is very common for all sorts of types • Different services may return different formats for the same type (even in the same company!) • Consider using value objects • Fundamental abstractions in a business domain • Examples: monetary amount, account number, entry date 53
  • 55. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Value Objects • Key properties: • Values are abstractions of a problem domain • Values have no lifecycle • Values have no alterable state • Values are referentially transparent (i.e. no side effects) • Implementation: • Internal representation (logical or canonical format) • Deals with invalid and unknown values • Implements getValue(), toString(), equals(), hashCode(), isValid() • Factory method and private constructor 54
  • 56. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Infrastructure for Value Objects • Formatter • Formats value object (according to locale) • Validates (incomplete) string syntactically • Parses string and converts it to logical format • Converter • Converts proprietary format to logical format and vice versa • Used for service data which does not conform to the logical format. 55
  • 57. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Summary • POWAs (Plain Old Web Applications) • Easy on developers but a hassle for users • Server-side presentation layer simplifies a lot • RIAs • A lot more challenging to developers • Presentation model is the pivotal concept • Additional infrastructure required • Partitioning has quite some impact 56
  • 58. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Resources / Links • Presentation model: http://www.martinfowler.com/eaaDev/PresentationModel.html http://http://www.jgoodies.com/articles/patterns-and-binding.pdf • Service Data Objects: http://www.bea.com/dev2dev/assets/sdo/Next-Gen-Data-Programming-Whitepaper.pdf • Value Objects: http://www.riehle.org/computer-science/research/2006/plop-2006-value-object.pdf • Validation: https://validation.dev.java.net/ http://http://www.springframework.org/docs/reference/validation.html 57
  • 59. Backup Slides For difficult and mean questions
  • 60. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Event Broadcasting Problems and Solutions Component 1. GUI Event 2. Method Call Listener for A Component A Model 3. Model Event Listener for A Common Model Component 5. GUI Event Listener for B 3. Model Event Component B Model Listener for B 4. Method Call • Protectors prevent cyclic event flow • Implemented as dynamic proxies on listener interfaces 59
  • 61. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns The Model Interface public interface Model { // Common environment for all models: public ModelContext getModelContext(); // Basic enabling of being observable: public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener); public void addPropertyChangeListener(PropertyChangeListener listener); public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener); public void removePropertyChangeListener(PropertyChangeListener listener); // To visit model graph (required for synchronization): public void visit(ModelVisitor modelVisitor); // To initially synchronize dependend Acs: public void synchronize(); ... } 60
  • 62. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Pres. Model Code Sample public class SimpleModel extends GenericPropertyModel { public static final String MY_FLAG_PROPERTY = "myFlag"; public SimpleModel(ModelContext modelContext) { super(modelContext); defineProperty(MY_FLAG_PROPERTY, boolean.class); } public boolean isMyFlag() { return (Boolean)getProperty(MY_FLAG_PROPERTY); } public void setMyFlag(boolean value) { setProperty(MY_FLAG_PROPERTY, value); } } • A model with a single boolean state • Observation and synchronization feature covered in super class 61
  • 63. Daniel Pfeifer, Bruno Schäffer – Canoo Java Rich Internet Application Patterns Code Sample: Associate AC public class SimpleAK extends ModeledJComponent<SimpleModel> { private JCheckBox checkBox; public SimpleAK(SimpleModel model) { super(model); } protected JComponent createComponent(SimpleModel model, ...) { return checkBox = new JCheckBox("My Flag"); } protected void createComponentChangeListeners(final SimpleModel model, ...) { checkBox.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { model.setMyFlag(checkBox.isSelected()); } }); } protected void createModelChangeListeners(SimpleModel model, ...) { model.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { checkBox.setSelected((Boolean)evt.getNewValue()); } }); } 62 }