SlideShare a Scribd company logo
Presented by Arsalan Ahmed
What Are Design Patterns?
 Well-understood code patterns
 Solve common problems
 Create common pattern vocabulary
 Speed up design and development
 Encourage creating design standards
Useful Design Principles
 Prefer Composition over Inheritance
 Program to abstractions instead of
concrete implementations
 Design loosely coupled components
 Encapsulate what varies
 Hide the likely-to-change code behind an
interface
Time-Tested Design Principles
 S – Single Responsibility Principle
 One reason to change per class
 O – Open-Closed Principle
 Classes open for extension, closed for modification
 L – Liskov Substitution Principle
 Classes can be substituted if designed to be
referenced via their public contracts
 I – Interface Segregation Principle
 Interfaces should not be bloated
 D – Dependency Inversion Principle
 Classes should not be responsible for creating their
dependencies
Anti-Patterns
 Commonly used
 Often seem harmless
 Degrade overall design
 Avoid like a plague!
Example Anti Patterns
 The Arrowhead
 Constructor Over-Injection
 Gold Plating
 Interface Bloat
 God Object
 Magic Literals
 Reinventing The Wheel
The Gang Of Four
 Authors of the canonical book Design
Patterns: Elements of Reusable Object-
Oriented Software
 Erich Gamma, Richard Helm, Ralph
Johnson, John Vlissides
 Main theme 1: Program to an interface
instead of an implementation
 Main theme 2: Favor composition over
inheritance
GoF Design Patterns
 Creational: Abstract Factory, Builder,
Factory Method, Prototype, Singleton
 Structural: Adapter, Bridge, Composite,
Decorator, Façade, Flyweight, Proxy
 Behavioral: Chain of Responsibility,
Command, Interpreter, Iterator,
Mediator, Memento, Observer, State,
Strategy, Template, Visitor
Enterprise Design Patterns
 Patterns found in enterprise applications
 Major proponent: Martin Fowler of
Thoughtworks
 Enterprise patterns go beyond GoF
patterns
 Often specific to technology stacks
Pattern: The Command
Source: dofactory.com
What Makes It Useful?
 Repeatable pattern to execute tasks as
objects
 Allows parameterizing command
invokers with different commands
 Allows undo operations
 Meta-Command Pattern allows creating
composite commands
 Decouples worker objects from client
objects
Practical Uses
 Background processing agents
 Allow third-party vendors to create and
distribute custom commands
 Supports queuing requests
 Facilitates logging requests
 By serializing/deserializing objects to/from log
files
 Log contains history of all command objects
 Allows implementing transaction semantics
Command Pattern
Demo
Pattern: The Decorator
Source: dofactory.com
What Makes It Useful?
 Facilitates implementing the open-
closed principle
 Allows adding new functionality without
modifying existing classes
 Promotes composition over inheritance
 Promotes iterative development
Practical Uses
 Dynamically creating specialized objects
 Provide flexible API with object
decorators
 Example uses in the .Net framework
 BufferedStream decorates MemoryStream
Decorator Pattern
Demo
Before Using The Decorator
After Using The Decorator
Pattern: Lazy Load
 Avoid performing time-consuming
operations unless unavoidable
 Load data from database or an external
service as late as possible
 Cache fetched data for as long as
feasible
 Reduce database and/or network load
Code Sample
Private Shared ReadOnly Property
DTSearchIndexLocation() As String
Get
If String.IsNullOrEmpty(_dtSearchIndexLocation)
Then
' fetch from database and assign to
_dtSearchIndexLocation
End If
Return _dtSearchIndexLocation
End Get
End Property
Design Patterns In .Net
 Observer
 Iterator
 Decorator
 Adapter
 Factory
 Strategy
 Composite
 Template Method
 Intercepting Filter
 Page Controller
Further Study
 Writings of The Godfather of Enterprise
Design Patterns a.k.a. Martin Fowler
 Martinfowler.com
 Head-First Design Patterns by O’Reilly
 Writings of Uncle Bob a.k.a. Robert C.
Martin
 ButUncleBob.com, blog.objectmentor.com
 Presentations by Jeremy Miller
 codebetter.com/blogs/jeremy.miller

More Related Content

PPTX
When Frameworks Suck by Damnjan Jovanic
The Business Transformation Network
 
PDF
Multithreading in C# - pitfalls, mistakes and solutions.
Marcin Dembowski
 
PPTX
About Dewey Hong
Dewey Hong
 
PDF
Beyond Supply Chain Scorecards: New Approaches to Elevating Supplier Responsi...
Sustainable Brands
 
PPTX
Chain of Responsibility Pattern
Hélio Costa e Silva
 
PDF
Chain of responsibility
Jyaasa Technologies
 
PPTX
Design patterns
nisheesh
 
PDF
dotnet stuff.com tutorials-design-patterns_exploring-net-design-patterns-in-s...
Anil Sharma
 
When Frameworks Suck by Damnjan Jovanic
The Business Transformation Network
 
Multithreading in C# - pitfalls, mistakes and solutions.
Marcin Dembowski
 
About Dewey Hong
Dewey Hong
 
Beyond Supply Chain Scorecards: New Approaches to Elevating Supplier Responsi...
Sustainable Brands
 
Chain of Responsibility Pattern
Hélio Costa e Silva
 
Chain of responsibility
Jyaasa Technologies
 
Design patterns
nisheesh
 
dotnet stuff.com tutorials-design-patterns_exploring-net-design-patterns-in-s...
Anil Sharma
 

Similar to Some Cool Design Patterns, Practices, and Principles (20)

PPT
5 Design Patterns Explained
Prabhjit Singh
 
PPTX
Design Principles to design Patterns
Faizan Haider
 
PPTX
GoF Design patterns I: Introduction + Structural Patterns
Sameh Deabes
 
PPT
Introduction to design patterns
Amit Kabra
 
PPT
Design pattern
Mallikarjuna G D
 
PDF
software engineering Design Patterns.pdf
mulugetaberihun3
 
PDF
Design patterns for fun & profit - CoderCruise 2018
David Litvak Bruno
 
PPTX
Segue to design patterns
Rahul Singh
 
PPTX
Design patterns Structural
UMAR ALI
 
PDF
Introduction to Design Pattern
Sanae BEKKAR
 
PPT
Introduction To Design Patterns
sukumarraju6
 
PPTX
design pattern is the computer scicence subject
vamsikrishna76598838
 
PDF
Design patterns
Anas Alpure
 
PPT
Design Patterns .Net
Hariom Shah
 
PPTX
Design pattern of software words computer .pptx
muslimpari2503
 
PPTX
Software Architecture and Design Patterns Notes.pptx
VivekanandaGN2
 
PPTX
Sofwear deasign and need of design pattern
chetankane
 
PPTX
DesignPattern-Overview.pptx
Mohit750936
 
PPS
Design Patterns For 70% Of Programmers In The World
Saurabh Moody
 
PPTX
Typescript design patterns applied to sharepoint framework - Sharepoint Satur...
Luis Valencia
 
5 Design Patterns Explained
Prabhjit Singh
 
Design Principles to design Patterns
Faizan Haider
 
GoF Design patterns I: Introduction + Structural Patterns
Sameh Deabes
 
Introduction to design patterns
Amit Kabra
 
Design pattern
Mallikarjuna G D
 
software engineering Design Patterns.pdf
mulugetaberihun3
 
Design patterns for fun & profit - CoderCruise 2018
David Litvak Bruno
 
Segue to design patterns
Rahul Singh
 
Design patterns Structural
UMAR ALI
 
Introduction to Design Pattern
Sanae BEKKAR
 
Introduction To Design Patterns
sukumarraju6
 
design pattern is the computer scicence subject
vamsikrishna76598838
 
Design patterns
Anas Alpure
 
Design Patterns .Net
Hariom Shah
 
Design pattern of software words computer .pptx
muslimpari2503
 
Software Architecture and Design Patterns Notes.pptx
VivekanandaGN2
 
Sofwear deasign and need of design pattern
chetankane
 
DesignPattern-Overview.pptx
Mohit750936
 
Design Patterns For 70% Of Programmers In The World
Saurabh Moody
 
Typescript design patterns applied to sharepoint framework - Sharepoint Satur...
Luis Valencia
 
Ad

Some Cool Design Patterns, Practices, and Principles

  • 2. What Are Design Patterns?  Well-understood code patterns  Solve common problems  Create common pattern vocabulary  Speed up design and development  Encourage creating design standards
  • 3. Useful Design Principles  Prefer Composition over Inheritance  Program to abstractions instead of concrete implementations  Design loosely coupled components  Encapsulate what varies  Hide the likely-to-change code behind an interface
  • 4. Time-Tested Design Principles  S – Single Responsibility Principle  One reason to change per class  O – Open-Closed Principle  Classes open for extension, closed for modification  L – Liskov Substitution Principle  Classes can be substituted if designed to be referenced via their public contracts  I – Interface Segregation Principle  Interfaces should not be bloated  D – Dependency Inversion Principle  Classes should not be responsible for creating their dependencies
  • 5. Anti-Patterns  Commonly used  Often seem harmless  Degrade overall design  Avoid like a plague!
  • 6. Example Anti Patterns  The Arrowhead  Constructor Over-Injection  Gold Plating  Interface Bloat  God Object  Magic Literals  Reinventing The Wheel
  • 7. The Gang Of Four  Authors of the canonical book Design Patterns: Elements of Reusable Object- Oriented Software  Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides  Main theme 1: Program to an interface instead of an implementation  Main theme 2: Favor composition over inheritance
  • 8. GoF Design Patterns  Creational: Abstract Factory, Builder, Factory Method, Prototype, Singleton  Structural: Adapter, Bridge, Composite, Decorator, Façade, Flyweight, Proxy  Behavioral: Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template, Visitor
  • 9. Enterprise Design Patterns  Patterns found in enterprise applications  Major proponent: Martin Fowler of Thoughtworks  Enterprise patterns go beyond GoF patterns  Often specific to technology stacks
  • 11. What Makes It Useful?  Repeatable pattern to execute tasks as objects  Allows parameterizing command invokers with different commands  Allows undo operations  Meta-Command Pattern allows creating composite commands  Decouples worker objects from client objects
  • 12. Practical Uses  Background processing agents  Allow third-party vendors to create and distribute custom commands  Supports queuing requests  Facilitates logging requests  By serializing/deserializing objects to/from log files  Log contains history of all command objects  Allows implementing transaction semantics
  • 15. What Makes It Useful?  Facilitates implementing the open- closed principle  Allows adding new functionality without modifying existing classes  Promotes composition over inheritance  Promotes iterative development
  • 16. Practical Uses  Dynamically creating specialized objects  Provide flexible API with object decorators  Example uses in the .Net framework  BufferedStream decorates MemoryStream
  • 18. Before Using The Decorator
  • 19. After Using The Decorator
  • 20. Pattern: Lazy Load  Avoid performing time-consuming operations unless unavoidable  Load data from database or an external service as late as possible  Cache fetched data for as long as feasible  Reduce database and/or network load
  • 21. Code Sample Private Shared ReadOnly Property DTSearchIndexLocation() As String Get If String.IsNullOrEmpty(_dtSearchIndexLocation) Then ' fetch from database and assign to _dtSearchIndexLocation End If Return _dtSearchIndexLocation End Get End Property
  • 22. Design Patterns In .Net  Observer  Iterator  Decorator  Adapter  Factory  Strategy  Composite  Template Method  Intercepting Filter  Page Controller
  • 23. Further Study  Writings of The Godfather of Enterprise Design Patterns a.k.a. Martin Fowler  Martinfowler.com  Head-First Design Patterns by O’Reilly  Writings of Uncle Bob a.k.a. Robert C. Martin  ButUncleBob.com, blog.objectmentor.com  Presentations by Jeremy Miller  codebetter.com/blogs/jeremy.miller

Editor's Notes

  • #3: Say more with less, shared vocabulary speeds up development and reduces chances of confusion and misunderstanding.
  • #7: Constructor Over Injection: If the class can function without a particular dependent object, it shouldn’t demand it in the constructor.