designpatternsviac-1220224561182623-9

Upload: mohamed-samy

Post on 05-Apr-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/2/2019 designpatternsviac-1220224561182623-9

    1/28

    Mohamed MeligySenior Software Engineer

    SilverKey Tech.

    weblogs.asp.net/meligy

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    2/28

  • 8/2/2019 designpatternsviac-1220224561182623-9

    3/28

  • 8/2/2019 designpatternsviac-1220224561182623-9

    4/28

    Design Patterns via C# 3.0Part 1

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    5/28

    Objects, Objects, Objects,

    http://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    6/28

    You thought you knew those little chunks

    Class

    Interface Inheritance

    Encapsulation

    Abstraction Polymorphism

    SoC

    OCP DRY

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    7/28

    Single Responsibility

    You should not affectglobal properties

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    8/28

    Dont Repeat Yourself Keep it DRY

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    9/28

    Open / Closed!Extension / Modification

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    10/28

    Once, there was a gang

    GoF

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    11/28

    23 Classic patterns in 3 main categories

    CreationalThe process of object creation

    Singleton

    Abstract Factory StructuralThe composition of classes and objects

    Adapter

    Decorator

    BehavioralHow classes and objects interact and distribute the work

    Strategy

    Command

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    12/28

    There must be one, and only one

    You want only one instance to be exposed from yoursingleton class to your clients

    Players: SingletonThe class that exposes only one object of itself

    ClientThe code that calls the instance from this class

    Example:HttpContext.Current

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    13/28

  • 8/2/2019 designpatternsviac-1220224561182623-9

    14/28

    Let the factory decide what product to create!

    You want the client code to only call the interface, notthe exact class that implements it

    Players: Abstract Factory Factory Product1, Product2, Client

    Example:Logging, Plugins

    Provide an interface for creating

    families of dependent objects without

    specifying their concrete classes

    GoF

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    15/28

  • 8/2/2019 designpatternsviac-1220224561182623-9

    16/28

    Plug this code into this other code please

    Encapsulates the interface of some code inside anotherinterface

    Players: Adaptee Target Adapter Client

    Example:Serialization, DTOs

    Convert the interface of a class into

    another interface clients expect.

    GoF

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    17/28

  • 8/2/2019 designpatternsviac-1220224561182623-9

    18/28

    He should not know hes being decorated ;-)

    Extend the object without touching it!

    Players:

    Component ConcreteComponent Decorator ConcreteDecorator

    Example:Streams

    Attach additional responsibilities to an

    object dynamically

    GoF

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    19/28

  • 8/2/2019 designpatternsviac-1220224561182623-9

    20/28

    Design Patterns via C# 3.0Part 2

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    21/28

    Define a strategy first, use it, and reuse it.

    Define the strategy interface, and use it in other classes,even change it when needed.

    Players: Strategy ConcreteStrategy Context

    Example:Domain Validation Define a family of algorithms,

    encapsulate each one, and make them

    interchangeable.

    GoF

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    22/28

  • 8/2/2019 designpatternsviac-1220224561182623-9

    23/28

    Transaction, Unit Of Work, etc

    Define the strategy interface, and use it in other classes,even change it when needed.

    Players: Command ConcreteCommand Client Invoker Receiver

    Example:Queue, Logging, Undo

    Encapsulate a request as an object,thereby letting you parameterize clients

    with different requests, queue or log

    requests, and support undoable

    operations.

    GoF

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    24/28

  • 8/2/2019 designpatternsviac-1220224561182623-9

    25/28

    Direct Indirect

    Duplicate Code (DRY)

    Large Method/Class(SoC) Long Parameter List

    (Single Responsibility) Comments

    Very Little Too Much

    Difficulty in changing class

    Difficulty in having newbehavior Dependencies

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligy
  • 8/2/2019 designpatternsviac-1220224561182623-9

    26/28

  • 8/2/2019 designpatternsviac-1220224561182623-9

    27/28

  • 8/2/2019 designpatternsviac-1220224561182623-9

    28/28

    GoF Patterns Other Patterns

    C# 3.0 Design Patterns(book OReilly)

    patterns.cs.up.ac.za/examples.shtml

    C# Design Patterns, Atutorial (bookAddison

    Wesley) dofactory.com codeproject.com aspalliance.com

    martinfowler.com(WARNING: java)

    codebetter.com/blogs/david.hayden

    (book) Agile Principles Patterns,and Practices in C#

    msdn.microsoft.com/en-us/library/aa137892.aspx

    http://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://weblogs.asp.net/meligyhttp://patterns.cs.up.ac.za/examples.shtmlhttp://patterns.cs.up.ac.za/examples.shtmlhttp://www.dofactory.com/http://www.codeproject.com/http://aspalliance.com/http://www.martinfowler.com/http://www.codebetter.com/blogs/david.haydenhttp://www.codebetter.com/blogs/david.haydenhttp://msdn.microsoft.com/en-us/library/aa137892.aspxhttp://msdn.microsoft.com/en-us/library/aa137892.aspxhttp://msdn.microsoft.com/en-us/library/aa137892.aspxhttp://msdn.microsoft.com/en-us/library/aa137892.aspxhttp://msdn.microsoft.com/en-us/library/aa137892.aspxhttp://msdn.microsoft.com/en-us/library/aa137892.aspxhttp://msdn.microsoft.com/en-us/library/aa137892.aspxhttp://www.codebetter.com/blogs/david.haydenhttp://www.codebetter.com/blogs/david.haydenhttp://www.codebetter.com/blogs/david.haydenhttp://www.martinfowler.com/http://aspalliance.com/http://www.codeproject.com/http://www.codeproject.com/http://www.dofactory.com/http://patterns.cs.up.ac.za/examples.shtmlhttp://patterns.cs.up.ac.za/examples.shtml