designpatternsviac-1220224561182623-9
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