Title: SOEN 343 Software Design
1SOEN 343Software Design
- Section H Fall 2006
- Dr Greg Butler
- http//www.cs.concordia.ca/gregb/home/soen343h-f0
6.html
2Outline
- Week 9 lectures Evaluate Good Design
- Page Controller and Front Controller
- Note Command Pattern
- Web EA Do-It-All TS Re-design
- GRASP Principles
- Pure Fabrication
- Indirection
3Recall the Greeting EA
- A single servlet which offers the greeting
Hello. - We refactored it, offering two alternative
designs.
4Review Question
- On a blank sheet of paper
- Provide three class diagrams corresponding to the
three design solutions of the Greeting EA.
5Evaluating a Design
- Which is a better design?
- What is a good design?
6What is a good design?
- Satisfies user needs, requirements.
- Reveals intent.
- Is a simple as possible.
- Minimizes cost of likely changes.
- And
- High cohesion.
- Low coupling.
7Greeting EA Evolution What if
- Support a personalized greeting.
- Change look of output (e.g. bold the name).
- Get full name from db.
8Comparing Design Solutions
Property Soln 1 Soln 2 Soln 3
Correct ? ? ?
Intent clear
Simplest
Acc. Change
Cohesion
Coupling
9GRASP Controller
- Who handles a system event?
- E.g. List Movies
- Main choices assign to a design entity
representing - Overall system, or subsystem (façade
controller). - A Use Case scenario(often named, e.g.
ListMovieHandler).
10GRASP Controller
- Who handles a system event?
- E.g. List Movies
- Main choices assign to a design entity
representing - Overall system, or subsystem (façade
controller). - A Use Case scenario(often named, e.g.
ListMovieHandler).
11Controller Patterns
Template View
Page Controller
Presentation
Front Controller
Transform View
Domain Model
Transaction Script
Domain
Data Mapper
Active Record
Table Module
Data Mapper
Table Data Gateway
Row Data Gateway
Data Source
Table Data Gateway
12Page Controller (done)
13Front Controller
- Fowler A controller that handles all requests
for a web site. - The Front Controller consolidates all request
handling by channeling requests through a single
handler object. This object can carry out common
behaviour which can be modified at runtime with
decorators. This handler then dispatches to
command objects for behaviour particular to a
request.
14Front Controller
- GoF design pattern Command
- Use a Command object to encapsulate the steps
that are executed by a command. - CommanddoIt() executes command
- Allows CommandunDoIt() etc
- GoF design pattern Decorator
- Decoratorm() adds additional behaviour, but
delegates to real Objectm() for real behaviour - Eg, logging command execution before/after
executing command
15Page vs Front Controller Differences in URL
- Page Controllers for A1
- http/stu.cs/343A1/ViewTaskList
- http/stu.cs/343A1/AddTask
- http/stu.cs/343A1/RemoveAllTasks
-
- Front Controller for A1
- Base URL http/stu.cs/343A1/frontController
- /frontController?commandViewTaskList
- /frontController?commandAddTaskGradetitleabc
16Front Controller
17Front Controller
18Front Controller (Fowler)Command (GoF) Patterns
FrontCommand
init ( )
processRequest ( )
ViewStudInfoCommand
RemoveStudentCommand
processRequest ( )
processRequest ( )
19Front Controller Sequence Diagram
20Front Controller ProcessRequest
21Front Controller (contd)
22Front Controller Advantages?
23Web EA Redesign Exercise
- Refactoring a DoItAll Servlet, let me count the
ways
24Do-it-all Servlet or Script
Do-it-allServlet or Script
Presentation
Domain
Data Source
25Do-it-all Servlet or Script, Class
- public class DoItAll extends javax.servlet.http.Ht
tpServlet -
- protected void doGet(
- HttpServletRequest request,
- HttpServletResponse response)
- throws ... //
-
-
-
26Redesigning This Application
- Redesign DoItAll so as to increase the class
cohesion. - Create new classes. Which EA patterns would you
use? - Distribute the doGet() method code (given on the
next slide) into the new classes. Identify which
lines would go into which classes.
27Do-it-all Transaction Script, doGet()
- String lastName request.getParameter(")
- Connection dbc DbRegistry.getDbConnection()
- String findSql "SELECT from where LastName
? - PreparedStatement dbQuery dbc.prepareStatement(f
indSql) - dbQuery.setString(1, lastName)
- ResultSet rs dbQuery.executeQuery()
- rs.next()
- String firstName rs.getString("FirstName")
- lastName lastName.toUpperCase()
- PrintWriter out response.getWriter()
- response.setContentType("text/html")
- out.println("lth1gtHello "firstName"
"lastName"lt/h1gt")
28Do-it-all Servlet Redesign Separating Concerns
- The next few slides show ways in which we can
separate concerns i.e. distribute the
functionality of the do-it-all script into
separate classes. - Combinations other than the ones shown are
possible.
29Redesigning Do-it-all (2 classes) 1
Do-it-all
Presentation
Domain
Data Source
Note
30Redesigning Do-it-all (3 classes) 3
Do-it-all
Presentation
Domain
Data Source
31Redesigning Do-it-all (4 classes) 4
Do-it-all
Presentation
Domain
Data Source
32Redesigning Do-it-all Adding (5 classes) 5
Do-it-all
Presentation
Domain
Data Source
33Redesigning Do-it-all Adding 5b
Do-it-all
Presentation
Domain
Data Source
34Redesigning Do-it-all (5 classes) 5c
Do-it-all
Presentation
Domain
- Is there anything wrong with this design? (Hint
consider the dependencies and the layering style.)
Data Source
35Redesigning Do-it-all (6 classes) 6
Do-it-all
Presentation
Domain
Data Source
36Pure Fabrication
- Problem Existing objects, ie domain objects, are
not appropriate to have the responsibility - Solution suggested by Information Expert not
appropriate - Might violate high cohesion, low coupling
- Solution Fabricate (ie create, make up) a new
object to hold the responsibility
37GRASP Pure Fabrication
- Assign a highly cohesive set of responsibilities
to an artificial or convenience class that does
not represent a problem domain conceptsomething
made up, to support high cohesion, low coupling,
and reuse. - Can you think of an example from EA?
38GRASP Pure Fabrication
- Design of objects
- Representational decomposition
- Behavorial decomposition
- Its OK for OO software to have objects
representing behaviour, ie use case, process,
function, strategy, TS - But do not overdo it
- All GoF design patterns are Pure Fabrications
39Indirection
- Problem How to assign responsibility to avoid
direct coupling? How to de-couple objects? - Solution Assign responsibility to an
intermediatory object to mediate between the two
components - Example Adapter pattern
- Intermediatory to external tax calculators
40Fig. 25.10
41Indirection
- Most problems in computer science can be solved
by another level of indirection