web tier design patterns - developintelligence.com · the solution: model-view-controller !...
TRANSCRIPT
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"
CONTROLLER!VIEW!-Provides business logic!-Translates user requests into calls to MODEL!-Selects VIEW for response"
-Displays the MODEL data!-Sends user request to CONTROLLER!-Notified by MODEL of state change"
User request"
Select View"
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
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
client!
JavaBean!
(model)!
jsp!
database!
request!
response! Servlet"(controller)!
(view)!
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! Front Controller!
ServletFC! JSPFC!
request!
<<servlet>>! <<jsp>>!
Front Controller Sequence Diagram
Client! Controller! Dispatcher! View!
1. Send Request!
2. Send Request!
1.1 Delegate Request!
2.1 Forward Request!
1.1.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 Sequence Diagram
Client! View! Helper!Business"Service!
1. Request!1.1 Get Data!
1.1.1 Get Data!
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 Sequence Diagram
Helper!Business Delegate!
Business Service!
1. Create!1.1 Invoke!
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
Dispatcher View Class Diagram
Client!Front Controller!
View!View Helper!
<<servlet>>!
<<jsp>>!
1..*!
1..*!
Dispatcher View Sequence Diagram
Client! Controller! View! Helper!
1. Request!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!
View!View Helper!
<<servlet>>!
<<jsp>>!
1..*! 1..*!
1..*!
Service To Worker Sequence
Diagram
Client! Controller! View! Helper!
1. Request!
1.1.1 Dispatch!
1.1 Get Data!
To business tier!
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
! "Courseware
! " Java Application
Development
! " Java Web App
Development
! "Enterprise Java
Development
! "OOAD / UML
! " IT Managerial
! "Emerging Technologies and Frameworks
! 2003 - 2007 DevelopIntelligence
Contact Us
! "For more information about our services, please
contact us:
! "Kelby Zorgdrager
! "303-395-5340
! 2003 - 2007 DevelopIntelligence