csse 374 : more object design with gang of four design patterns

26
CSSE 374: More Object Design with Gang of Four Design Patterns Steve Chenoweth Office: Moench Room F220 Phone: (812) 877-8974 Email: [email protected] Q1 These slides derived from Shawn Bohner, Curt Clifton, and others involved in delivering 374. Chandan Rupakheti Office: Moench Room F203 Phone: (812) 877-8390 Email: rupakhet@rose- hulman.edu

Upload: pearl

Post on 23-Feb-2016

50 views

Category:

Documents


0 download

DESCRIPTION

These slides derived from Shawn Bohner , Curt Clifton, and others involved in delivering 374. . CSSE 374 : More Object Design with Gang of Four Design Patterns. Steve Chenoweth Office: Moench Room F220 Phone: (812) 877-8974 Email: [email protected]. Chandan Rupakheti - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: CSSE 374 : More Object Design with Gang of Four Design Patterns

CSSE 374:More Object Design with

Gang of Four Design Patterns

Steve ChenowethOffice: Moench Room F220Phone: (812) 877-8974Email: [email protected]

Q1

These slides derived from Shawn Bohner, Curt Clifton, and others involved in delivering 374.

Chandan Rupakheti Office: Moench Room F203Phone: (812) 877-8390Email: [email protected]

Page 2: CSSE 374 : More Object Design with Gang of Four Design Patterns

Learning Outcomes: Patterns, TradeoffsIdentify criteria for the design of a software system and select patterns, create frameworks, and partition software to satisfy the inherent trade-offs.

Using GoF Patterns in Iteration 3 Local caching Failover to local services Support for third-party

POS devices Handling payments

Exercise (if time) Week 3 Feedback!

Q3

Page 3: CSSE 374 : More Object Design with Gang of Four Design Patterns

Gang of Four Design PatternsBehavioral Interpreter Template Method Chain of

Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor

Creational Factory Abstract

Factory Builder Prototype Singleton

Structural Adapter Bridge Composite Decorator Façade Flyweight Proxy

Q1

Checkmark = Done

Page 4: CSSE 374 : More Object Design with Gang of Four Design Patterns

The basic problem – Nextgen POS relies on remote services Need to get prices for items scanned Need to update inventory from this scanning

Both these functions need to be fast Both need to be very reliable

But the “master files” are on remote servers!

http://www2.wjbf.com/news/2011/feb/03/special-report-self-checkout-vs-clerk-checkout-im-113457/

Page 5: CSSE 374 : More Object Design with Gang of Four Design Patterns

Failover & Performance with Local Caching

What is a cache? How does a cache usually work?

Why use a local cache for NextGen POS? Performance Improve recoverability

Q2

Page 6: CSSE 374 : More Object Design with Gang of Four Design Patterns

Search Strategy for Product Information

1. Look in memory (in map stored by ProductCatalog)

2. Look on local hard drive cache

3. Retrieve from remote persistence service

Q3

Page 7: CSSE 374 : More Object Design with Gang of Four Design Patterns

Applying the Adapter Pattern

Q4

“True” Adapters

Page 8: CSSE 374 : More Object Design with Gang of Four Design Patterns

Using a Factory to Set Up for Local Caching

Q5

Eliminate local cache?

Change external data source?

:Store :Register

pc:ProductCatalog

create2: create(pc)

1: create

1:ServicesFactory

psa : LocalProducts externalService :DBProductsAdapter

1.1: psa = getProductsAdapter()

1.1.2: create( externalService ) 1.1.1: create

the local service gets a reference to the adapter for the external service

the local service is returned

Page 9: CSSE 374 : More Object Design with Gang of Four Design Patterns

Product Lookup with In-memory Miss

Page 10: CSSE 374 : More Object Design with Gang of Four Design Patterns

Product Lookup with Local Cache Miss

Page 11: CSSE 374 : More Object Design with Gang of Four Design Patterns

Using Threads to Freshen the Cache

Async msg

Page 12: CSSE 374 : More Object Design with Gang of Four Design Patterns

How’s the final iteration going?

Used by permission. http://notinventedhe.re/on/2009-12-28

Page 13: CSSE 374 : More Object Design with Gang of Four Design Patterns

Handling Failure in NextGen POS:What should happen if there is a local cache miss and the external product information service fails?

Think for 15 seconds… Turn to a neighbor and discuss

it for a minute

Page 14: CSSE 374 : More Object Design with Gang of Four Design Patterns

DCD: Exceptions Caught and Thrown

PersistenceFacade

usageStatistics : Map

Object get(Key, Class) throws DBUnavailableException, FatalExceptionput(Key, Object) { exceptions= (DBUnavailableException, FatalException) }...

exceptionsFatalExceptionDBUnavailableException

exceptions thrown can be listed in another compartment labeled "exceptions"

UML: One can specify exceptions several ways.

1. The UML allows the operation syntax to be any other language, such as Java. In addition, some UML CASE tools allow display of operations explicitly in Java syntax.Thus,

Object get(Key, Class) throws DBUnavailableException, FatalException

2. The default UML syntax allows exceptions to be defined in a property string. Thus,

put(Object, id) { exceptions= (DBUnavailableException, FatalException) }

3. Some UML tools allow one to specify (in a dialog box) the exceptions that an operation throws.

Page 15: CSSE 374 : More Object Design with Gang of Four Design Patterns

Showing Exception in Sequence Diagrams

Convert Exceptions pattern

Q6

Name the Problem not the Thrower

«exception»DBUnavailableException()

: DBProductsAdapter

: PersistenceFacade

UML notation: All asynchronous messages, including exceptions, are illustrated with a stick

arrowhead. Exceptions are shown as messages indicated by the exception class name. An optional «exception» or «signal» stereotype is legal (an exception is a kind

of signal in the UML), if increased visibility is desired.

ps = get(...)

ps = getDescription(id)

: java.sql.Statement

resultSet = executeQuery(...)

«exception»SQLException()

note the difference between synchronous and asynchronous message arrowheads in the UML

recall that in UML 2, a lifeline box can use an interface type to indicate an object of some anonymous class that implements this interface

«exception»ProductInfoUnavailableException()

stopping the message line at this point indicates the PersistenceFacade object is catching the exception

Page 16: CSSE 374 : More Object Design with Gang of Four Design Patterns

How should NextGen POS handle this exception?Common exception handling patterns Use a central error logging object to record all

exceptions for diagnosis by developers

Use a standard, application-independent, non-UI object to notify users

Can delegate to multiple different UI notifications Protected Variation for changes in reporting

Q7

Page 17: CSSE 374 : More Object Design with Gang of Four Design Patterns

Failover to Local Services with a Proxy

If at first you don’t succeed getting to remote, what the heck do you do?

Page 18: CSSE 374 : More Object Design with Gang of Four Design Patterns

Proxy GoF PatternProblem: How do we control access to some subject object if we want to avoid giving direct access?

Solution: Add a level of indirection with a proxy object that implements the same methods as the subject and conditionally delegates to it.

Q8,9

Page 19: CSSE 374 : More Object Design with Gang of Four Design Patterns

Structure of the Proxy Pattern

«interface»ISubjectInterface

foo()

RealSubject

foo()

{... pre-processingrealSubject.foo()... post-processing}

Client

subject : ISubjectInterface

doBar()

1

1

Proxy

realSubject : ISubjectInterface

foo()

{... whateversubject.foo()... whatever}

subject actually references an instance of Proxy, not RealSubject

"realSubject" will actually reference an instance of RealSubject

Page 20: CSSE 374 : More Object Design with Gang of Four Design Patterns

Proxy in NextGen POSPosting sales to the accounting service

Send postSale(Sale) to a redirection proxy

Proxy attempts to post to external service If it fails, then proxy

stores result locally

Page 21: CSSE 374 : More Object Design with Gang of Four Design Patterns

Proxy in NextGen POS — DCD

Page 22: CSSE 374 : More Object Design with Gang of Four Design Patterns

Proxy in NextGen POS: Object Diagram

Page 23: CSSE 374 : More Object Design with Gang of Four Design Patterns

Exercise: Proxy for Failover

Break up into your teams

Consider how NextGen POS can use a Proxy to failover to local storage if the remote accounting service is down.

Sketch a communication diagram depicting the above situation.

Page 24: CSSE 374 : More Object Design with Gang of Four Design Patterns

Week 3 Feedback!Plus: Class:

Quizzes before class Having time to work on HW in class

Projects: Teamwork! Client communications Having time in class to work on project Having more time with team Good to do an actual project

Page 25: CSSE 374 : More Object Design with Gang of Four Design Patterns

Week 3 Feedback!Delta: Class:

Quizzes before class Due just before? Need to go over slides Need help on quiz questions Quizzes are busy work Make due at end of class

Stop lecturing on slides Need code examples of patterns

HW: Time consuming Early morning deadlines!

Page 26: CSSE 374 : More Object Design with Gang of Four Design Patterns

Week 3 Feedback!Delta: Projects:

Clients not responding Closer relationships with open-source clients

Clients overbearing – making design choices Forcing class topics onto project work

What client wants vs what course asks for Classmates need to be respectful to clients Teammates need to work on project in class Teammates need to attend meetings with clients Scrum doesn’t fit all the documentation we do