260 likes | 652 Views
Design Patterns. Trends and Case Study John Hurst June 2005. Overview. Software Patterns Design Patterns Topics Case Study / Examples. Introduction. Christopher Alexander A Pattern Language: Towns, Buildings, Construction (1977) A Timeless Way of Building (1979)
E N D
Design Patterns Trends and Case Study John Hurst June 2005
Overview • Software Patterns • Design Patterns • Topics • Case Study / Examples
Introduction • Christopher Alexander • A Pattern Language: Towns, Buildings, Construction (1977) • A Timeless Way of Building (1979) • “Gang of Four” (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides) • Design Patterns (1995) • Buschmann et al • Pattern Oriented Software Construction (1996)
Key Idea • A Software Pattern is: • A solution • To a problem • In a context • With consequences • A Software Pattern has a name and a vocabulary.
Intent Also Known As Motivation Applicability Structure Participants Collaborations Consequences Implementation Known Uses Related Patterns Pattern Languages
OO Design Principles • Code to interfaces • Prefer composition to inheritance • Encapsulate what varies
Benefits • Improves thinking about OO design • New designs • Existing designs • Helps us realise the benefits of OO • Reuse of solutions to common problems • Catalogs • Communication tool • Common vocabulary
Example: Iterator • Intent: • Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation
Example: Decorator • Intent: • Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.
Application of Decorator • Apache Commons DBCP (Database Connection Pooling)
Architectural Patterns Analysis Patterns Design Patterns Patterns Landscape
“Platform Patterns” • J2EE Core Patterns • MS Building Blocks • Contrast with PEAA
Antipatterns • Examples • Big Ball Of Mud • Copy and Paste Programming • Magic Container • Tower of Voodoo
Broken Patterns • Double checked locking • “Deprecated” Patterns: • Factory Method (due to confusion over what it means) • Bridge • Flyweight • Interpreter
Specialised Fields • Real-time • Concurrency • Enterprise • Messaging • Analysis
Refactoring to Patterns • Remove duplicate code • Simplify logic • Communicate intention • Increase flexibility
Patterns with Programming Languages • Strategy • C++ templates: static type checking • Java interfaces and objects: runtime configuration • Ruby/Smalltalk blocks: idiomatic usage
Case Study: HHRDM • Design Patterns • Architectural Patterns • Analysis Patterns
Design Patterns • Abstract Factory • Template Method • Strategy • Façade • Proxy
Architectural Patterns • Layering • Data Access Patterns • Domain Model • Service Façade
Analysis Patterns • Temporal Patterns • Effectivity • Snapshot • Temporal Object • Temporal Property • Audit Trail • Bitemporal Model
References • Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides Design Patterns: Elements of Reusable Object-Oriented Software – Addison-Wesley 1995 • Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal Pattern-Oriented Software Architecture Wiley 1996 • Martin Fowler Patterns of Enterprise Application Architecture – Addison-Wesley 2002 • Martin Fowler Refactoring – Addison-Wesley 2000 • Martin Fowler Analysis Patterns – Addison Wesley 1996 • Gregor Hohpe, Bobby Woolfe Patterns of Enterprise Application Integration – Addison-Wesley 2003 • Joshua Kerievsky Refactoring to Patterns – Addison-Wesley 2004 • Deepak Alur, John Crupi, Dan Malks Core J2EE Patterns (2nd Ed) – Addison-Wesley 2003
Web Sites • Martin Fowler website http://www.martinfowler.com • Portland Pattern Repository http://c2.com/cgi/wiki • TheServerSide http://www.theserverside.com • Microsoft Patterns and Practices http://msdn.microsoft.com/architecture/patterns/
Relationships and Similarities Many patterns look similar structurally, but have different intent Proxy Decorator
The Agile Manifesto • Preferences: • Inidividuals and interactions over processes and tools • Working software over comprehensive documentation • Customer collaboration over contract negotiation • Responding to change over following a plan