Presented by Arsalan Ahmed
What Are Design Patterns?
 Well-understood code patterns
 Solve common problems
 Create common pattern vocabulary
 Spe...
Useful Design Principles
 Prefer Composition over Inheritance
 Program to abstractions instead of
concrete implementatio...
Time-Tested Design Principles
 S – Single Responsibility Principle
 One reason to change per class
 O – Open-Closed Pri...
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 L...
The Gang Of Four
 Authors of the canonical book Design
Patterns: Elements of Reusable Object-
Oriented Software
 Erich G...
GoF Design Patterns
 Creational: Abstract Factory, Builder,
Factory Method, Prototype, Singleton
 Structural: Adapter, B...
Enterprise Design Patterns
 Patterns found in enterprise applications
 Major proponent: Martin Fowler of
Thoughtworks
 ...
Pattern: The Command
Source: dofactory.com
What Makes It Useful?
 Repeatable pattern to execute tasks as
objects
 Allows parameterizing command
invokers with diffe...
Practical Uses
 Background processing agents
 Allow third-party vendors to create and
distribute custom commands
 Suppo...
Command Pattern
Demo
Pattern: The Decorator
Source: dofactory.com
What Makes It Useful?
 Facilitates implementing the open-
closed principle
 Allows adding new functionality without
modi...
Practical Uses
 Dynamically creating specialized objects
 Provide flexible API with object
decorators
 Example uses in ...
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 externa...
Code Sample
Private Shared ReadOnly Property
DTSearchIndexLocation() As String
Get
If String.IsNullOrEmpty(_dtSearchIndexL...
Design Patterns In .Net
 Observer
 Iterator
 Decorator
 Adapter
 Factory
 Strategy
 Composite
 Template Method
 I...
Further Study
 Writings of The Godfather of Enterprise
Design Patterns a.k.a. Martin Fowler
 Martinfowler.com
 Head-Fir...
Upcoming SlideShare
Loading in …5
×

Some Cool Design Patterns, Practices, and Principles

2,021 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,021
On SlideShare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • Say more with less, shared vocabulary speeds up development and reduces chances of confusion and misunderstanding.
  • Constructor Over Injection: If the class can function without a particular dependent object, it shouldn’t demand it in the constructor.
  • Some Cool Design Patterns, Practices, and Principles

    1. 1. Presented by Arsalan Ahmed
    2. 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. 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. 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. 5. Anti-Patterns  Commonly used  Often seem harmless  Degrade overall design  Avoid like a plague!
    6. 6. Example Anti Patterns  The Arrowhead  Constructor Over-Injection  Gold Plating  Interface Bloat  God Object  Magic Literals  Reinventing The Wheel
    7. 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. 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. 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
    10. 10. Pattern: The Command Source: dofactory.com
    11. 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. 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
    13. 13. Command Pattern Demo
    14. 14. Pattern: The Decorator Source: dofactory.com
    15. 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. 16. Practical Uses  Dynamically creating specialized objects  Provide flexible API with object decorators  Example uses in the .Net framework  BufferedStream decorates MemoryStream
    17. 17. Decorator Pattern Demo
    18. 18. Before Using The Decorator
    19. 19. After Using The Decorator
    20. 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. 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. 22. Design Patterns In .Net  Observer  Iterator  Decorator  Adapter  Factory  Strategy  Composite  Template Method  Intercepting Filter  Page Controller
    23. 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

    ×