Web Tier Design Patterns

Web Tier Design Patterns Objectives ! " Learn design patterns relevant to web application programming ! " Model View Controller ! " Front Controlle...
Author: Adelia Smith
43 downloads 3 Views 4MB Size
Web Tier Design Patterns

Objectives ! " Learn design patterns relevant to web application

programming ! " Model View Controller ! " Front Controller ! " View Helper ! " Composite View ! " Business Delegate ! " Dispatcher View ! " Service To Worker

! " Understand how enterprise applications can benefit from

these patterns

The Problem ! " Application construction ! " Applications built by many groups of developers ! " Groups have different skills ! " Groups have different objectives ! " Groups have different timelines ! " This translates into various pieces of the application being

developed independently

! " Application use ! " Applications often also need to support multiple clients ! " Different clients can interact with application in different ways ! " Share business data in different ways ! " Interactions follow different flows ! " This increases the complexity and risk of an application

The Solution: Model-View-Controller ! " Model ! " Represents business data and business rules ! " Typically a Java Bean or a POJO (plain old java object)

! " Controller ! " Maps user interactions to calls on the model, which often results

in a change to the business data

! " View ! " Renders the data encapsulated by the model and guarantees coordination with any changes to the business data ! " Each view must remain consistent with the backend data it represents

Benefits of MVC for the Web Tier ! " Separation of concern ! " Maintain modularized approach ! " Increased flexibility ! " For example, can move web-resident model to the EJB tier ! " Model components can be viewed in multiple ways ! " Support for new clients is simple

MVC Diagram MODEL! -Encapsulates business data! and business rules! -Handles calls from the CONTROLLER! -Notifies VIEW of changes"

VIEW!

-Displays the MODEL data! -Sends user request to CONTROLLER! -Notified by MODEL of state change"

User request"

Select View"

CONTROLLER!

-Provides business logic! -Translates user requests into calls to MODEL! -Selects VIEW for response"

The Model 1 Architecture ! " A variation of MVC for the web ! " Useful for smaller, simpler applications ! " Not as loosely coupled as larger-scale applications require ! " Not as complex to build / maintain

! " Model-1 architecture focuses on two components ! " JSP ! " Each JSP is responsible for handling requests ! " Also responsible for providing responses ! " JavaBeans

! " Model-1 solutions typically have large amount of JSP

scriptlet code

Model 1 Diagram request!

(view)! jsp!

response!

client! JavaBean! (controller)!

database! (model)!

The Model 2 Architecture ! " Also a variation of MVC ! " Looser coupling ! " Higher cohesion ! " Increased modularity = increased flexibility ! " Better for larger-scale applications

! " Model-2 architecture adds servlet to Model-1 architecture ! " Servlet acts as a controller ! " Servlet focuses on low level tasks

! " Model-2 architecture changes role of JSP ! " JSP focuses on presentation only ! " Lessens scriplet code

! " Much stricter separation of model from view from controller

Model 2 Diagram

(view)!

request!

response!

jsp! Servlet" (controller)!

client! database! JavaBean! (model)!

Front Controller ! " The “front door” to your application ! " Generally a pre-processor, but can be used for post-

processing too ! " Often used to enforce ! " Validation rules ! " Authentication constraints ! " Dispatching of requests ! " Session management

Front Controller Class Diagram Client!

request!

Front Controller!

!

ServletFC!

!

JSPFC!

Front Controller Sequence Diagram Client!

Controller!

1. Send Request!

Dispatcher!

View!

1.1 Delegate Request! 1.1.1 Forward Request!

2. Send Request! 2.1 Forward Request!

Front Controller Servlet Strategy ! " This is the most common approach ! " All requests route through the servlet ! " Front Controller processing is more logically separated

from the view

Front Controller JSP Strategy ! " Generally, this is undesirable due to the mismatch of low-

level processing and view processing ! " Tends to lead to complicated JSP code

Modularized Front Controller ! " For complex logic, a front controller can be broken into

smaller components ! " For example, an authentication component, validation component, and dispatching component ! " This continues the pursuit of architectural modularity

View Helper ! " Separates presentation logic from presentation

components (views) ! " Represent the model from a web tier perspective ! " Typically implemented as a JavaBean component ! " The JSP and View Helper can be implemented independently, allowing for ! " Separation of developer roles ! " Flexibility in the web tier ! " Multiple views sharing the same helper

View Helper Class Diagram Client! 1..*! View!

0..*! Helper!

View Helper Sequence Diagram Client! 1. Request!

View!

Helper!

1.1 Get Data! 1.1.1 Get Data!

Business" Service!

Implementing View Helper as a Tag Library ! " Requires more work upfront to create the tag library ! " May be more reusable than a simple JavaBean

component ! " Custom tags also add manageability concerns ! " Deploying tags, tag libraries, and descriptors

Business Delegate ! " Used to provide a façade over a complex business tier ! " Normally, presentation components interact with business

services directly, which may cause problems ! " If the business tier API changes, it affects the presentation tier ! " Heavy interaction with the business tier may result in too many

network calls

! " A Business Delegate can perform caching and throttling

Business Delegate Class Diagram Client! Business Delegate!

Business Service!

Business Delegate Sequence Diagram Helper! 1. Create!

Business Delegate! 1.1 Invoke!

Business Service!

Business Delegate as a Proxy ! " The Business Delegate exposes the same interface as

the business tier ! " Calls to the Business Delegate can be forwarded to the business tier ! " Data can also be cached and calls short-circuited ! " This can reduce network calls and increase performance

Business Delegate as an Adapter ! " Excellent for communication with disparate business

components ! " For example, communication with a web service component could be accomplished ! " The delegate would parse the XML request ! " The data in the request could be sent to an existing, non-XML

aware, business tier ! " A response could work the same way

Composite View ! " Modern web pages are built from smaller “sub-pages” ! " All Composite View does is define a pattern for creating

modularized views that can be combined ! " Complicated views can be managed much simpler via separate view components ! " This does add some runtime overhead in exchange for

the added flexibility

Composite View Class Diagram View Component!

Sub View!

Composite View!

Dispatcher View ! " Combines Front Controller and View Helper ! " May also involve Composite View

Dispatcher View Class Diagram Client!

!

Front Controller!

1..*! !

View!

1..*!

View Helper!

Dispatcher View Sequence Diagram Client! 1. Request!

Controller!

View!

Helper!

1.1 Dispatch! 1.1.1 Get Data!

To business tier!

Service To Worker ! " Structurally identical to Dispatcher View ! " Difference is in the behavior and location of the

intelligence ! " Now, the Front Controller interacts with View Helper components before selecting a view

Service To Worker Class Diagram Client!

!

Front Controller!

1..*! !

View!

1..*! 1..*!

View Helper!

Service To Worker Sequence Diagram Client! 1. Request!

Controller!

View!

Helper!

1.1 Get Data!

To business tier!

1.1.1 Dispatch!

Summary ! " There are several relevant design patterns for the web

tier ! " Model View Controller ! " Front Controller ! " View Helper ! " Composite View ! " Business Delegate ! " Dispatcher View ! " Service To Worker

! " These patterns can benefit enterprise applications by

promoting modularity, flexibility, and reuse

About DevelopIntelligence ! " Founded in 2003 ! " Provides outsourced services to learning organizations in area of software development ! " Represents over 35 years of combined experience, enabling software development community through educational and performance services ! " Represents over 50 years of combined software development experience ! " Delivered training to over 40,000 developers worldwide ! 2003 - 2007 DevelopIntelligence

Areas of Expertise ! " Instruction " Java " J2EE " WebServices / SOA " Web Application Development ! " Database Development ! " Open Source Frameworks ! " Application Servers ! ! ! !

! 2003 - 2007 DevelopIntelligence

! " Courseware ! " Java Application Development ! " Java Web App Development ! " Enterprise Java Development ! " OOAD / UML ! " IT Managerial ! " Emerging Technologies and Frameworks

Contact Us ! " For more information about our services, please contact us: ! " Kelby Zorgdrager ! " [email protected] ! " 303-395-5340

! 2003 - 2007 DevelopIntelligence