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

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 

Último (20)

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 

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 }