Your SlideShare is downloading. ×
0
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Code camp 2012-advanced-design-patterns
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Code camp 2012-advanced-design-patterns

605

Published on

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

  • Be the first to like this

No Downloads
Views
Total Views
605
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
21
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  1. AMIR BARYLKO ADVANCED DESIGN  PATTERNS WINNIPEG CODECAMP FEB 2012Amir Barylko Advanced Design Patterns
  2. WHO AM I? • Software quality expert • Architect • Developer • Mentor • Great cook • The one who’s entertaining you for the next hour!Amir Barylko Advanced Design Patterns
  3. RESOURCES • Email: amir@barylko.com • Twitter: @abarylko • Blog: http://www.orthocoders.com • Materials: http://www.orthocoders.com/presentationsAmir Barylko Advanced Design Patterns
  4. PATTERNS What are they? What are anti-patterns? Which patterns do you use?Amir Barylko Advanced Design Patterns
  5. WHAT ARE PATTERNS? •Software design Recipe •or Solution •Should be reusable •Should be general •No particular languageAmir Barylko Advanced Design Patterns
  6. ANTI-PATTERNS • More patterns != better design • No cookie cutter • Anti Patterns : Patterns to identify failure • God Classes • High Coupling • Breaking SOLID principles.... • (name some)Amir Barylko Advanced Design Patterns
  7. WHICH PATTERNS DO YOU USE? • Fill here with your patterns:Amir Barylko Advanced Design Patterns
  8. ADVANCED PATTERNS Let’s vote!Amir Barylko Advanced Design Patterns
  9. SOME PATTERNS... • Chain of resp. • List • Strategy Comprehension • Proxy • DTO • Object Mother • ActiveRecord • Page Object • Visitor • Repository • Null Object • Event Aggregator • Factory • Event SourcingAmir Barylko Advanced Design Patterns
  10. CHAIN OF RESPONSIBILITY • More than one object may handle a request, and the handler isnt known a priori. • The handler should be ascertained automatically. • You want to issue request to one of several objects without specifying The receiver explicitly. • The set of objects that can handle a request should be specified dynamicallyAmir Barylko Advanced Design Patterns
  11. Amir Barylko Advanced Design Patterns
  12. PROXY • Avoid creating the object until needed • Provides a placeholder for additional functionality • Very useful for mocking • Many implementations exist (IoC, Dynamic proxies, etc)Amir Barylko Advanced Design Patterns
  13. GOF
  14. ACTIVERECORD • Isa Domain Model where classes match very closely the database structure • Each table is mapped to class with methods for finding, update, delete, etc. • Each attribute is mapped to a column • Associations are deduced from the classesAmir Barylko Advanced Design Patterns
  15. create_table "movies", :force => true do |t| t.string "title" t.string "description" t.datetime "created_at" t.datetime "updated_at" end create_table "reviews", :force => true do |t| t.string "name" t.integer "stars" t.text "comment" t.integer "movie_id" t.datetime "created_at" t.datetime "updated_at" end class Movie < ActiveRecord::Base validates_presence_of :title, :description has_many :reviews end class Review < ActiveRecord::Base belongs_to :movie endAmir Barylko Advanced Design Patterns
  16. REPOSITORY • Mediator between domain and storage • Acts like a collection of items • Supports queries • Abstraction of the storageAmir Barylko Advanced Design Patterns
  17. http://martinfowler.com/eaaCatalog/repository.htmlAmir Barylko Advanced Design Patterns
  18. EVENT AGGREGATOR • Manage events using a subscribe / publish mechanism • Isolates subscribers from publishers • Decouple events from actual models • Events can be distributed • Centralize event registration logic • No need to track multiple objectsAmir Barylko Advanced Design Patterns
  19. Channel events from multiple objects into a single object to s i m p l i f y registration for clientsAmir Barylko Advanced Design Patterns
  20. MT COMMONSAmir Barylko Advanced Design Patterns
  21. EVENT SOURCING • Register all changes in the application using events • Event should be persisted • Complete Rebuild • Temporal Query • Event ReplayAmir Barylko Advanced Design Patterns
  22. http://martinfowler.com/eaaDev/EventSourcing.htmlAmir Barylko Advanced Design Patterns
  23. Amir Barylko Advanced Design Patterns
  24. LIST COMPREHENSION • Syntax Construct in languages • Describe properties for the list (sequence) • Filter • Mapping • Same idea for Set or Dictionary comprehensionAmir Barylko Advanced Design Patterns
  25. LANGUAGE COMPARISON • Scala for (x <- Stream.from(0); if x*x > 3) yield 2*x • LINQ var range = Enumerable.Range(0..20); from num in range where num * num > 3 select num * 2; • Clojure (take 20 (for [x (iterate inc 0) :when (> (* x x) 3)] (* 2 x))) • Ruby (1..20).select { |x| x * x > 3 }.map { |x| x * 2 }Amir Barylko Advanced Design Patterns
  26. OBJECT MOTHER / BUILDER • Creates an object for testing (or other) purposes • Assumes defaults • Easy to configure • Fluid interface • Usually has methods to to easily manipulate the domainAmir Barylko Advanced Design Patterns
  27. public class When_adding_a_an_invalid_extra_frame { [Test] public void Should_throw_an_exception() { // arrange 10.Times(() => this.GameBuilder.AddFrame(5, 4)); var game = this.GameBuilder.Build(); // act & assert new Action(() => game.Roll(8)).Should().Throw(); } } http://orthocoders.com/2011/09/05/the-bowling-game-kata-first-attempt/Amir Barylko Advanced Design Patterns
  28. Amir Barylko Advanced Design Patterns
  29. VISITOR • Ability to traverse (visit) a object structure • Different visitors may produce different results • Avoid littering the classes with particular operationsAmir Barylko Advanced Design Patterns
  30. http://en.wikipedia.org/wiki/Visitor_pattern#DiagramAmir Barylko Advanced Design Patterns
  31. NULL OBJECT • Represent “null” with an actual instance • Provides default functionality • Clear semantics of “null” for that domainAmir Barylko Advanced Design Patterns
  32. class animal { public: virtual void make_sound() = 0; }; class dog : public animal { void make_sound() { cout << "woof!" << endl; } }; class null_animal : public animal { void make_sound() { } }; http://en.wikipedia.org/wiki/Null_Object_patternAmir Barylko Advanced Design Patterns
  33. FACTORY • Creates instances by request • More flexible than Singleton • Can be configured to create different families of objects • IoC containers are closely related • Can be implemented dynamic based on interfaces • Can be used also to release “resource” when not neededAmir Barylko Advanced Design Patterns
  34. interface GUIFactory { public Button createButton(); } class WinFactory implements GUIFactory { public Button createButton() { return new WinButton(); } } class OSXFactory implements GUIFactory { public Button createButton() { return new OSXButton(); } } interface Button { public void paint(); } http://en.wikipedia.org/wiki/Abstract_factory_patternAmir Barylko Advanced Design Patterns
  35. STRATEGY • Abstracts the algorithm to solve a particular problem • Can be configured dynamically • Are interchangeableAmir Barylko Advanced Design Patterns
  36. http://orthocoders.com/2010/04/Amir Barylko Advanced Design Patterns
  37. DATA TRANSFER OBJECT • Simplifies information transfer across services • Can be optimized • Easy to understandAmir Barylko Advanced Design Patterns
  38. http://martinfowler.com/eaaCatalog/dataTransferObject.htmlAmir Barylko Advanced Design Patterns
  39. PAGE OBJECT • Abstract web pages functionality to be used usually in testing • Each page can be reused • Changes in the page impact only the implementation, not the clientsAmir Barylko Advanced Design Patterns
  40. public class LoginPage {     public HomePage loginAs(String username, String password) {         // ... clever magic happens here     }         public LoginPage loginWithError(String username, String password) {         //  ... failed login here, maybe because // one or both of the username and password are wrong     }         public String getErrorMessage() {         // So we can verify that the correct error is shown     } } http://code.google.com/p/selenium/wiki/PageObjectsAmir Barylko Advanced Design Patterns
  41. QUESTIONS?Amir Barylko Advanced Design Patterns
  42. RESOURCES • Email: amir@barylko.com, @abarylko • Slides: http://www.orthocoders.com/presentations • Patterns: Each pattern example has a linkAmir Barylko Advanced Design Patterns
  43. RESOURCES IIAmir Barylko Advanced Design Patterns
  44. RESOURCES IIIAmir Barylko Advanced Design Patterns
  45. QUALITY SOFTWARE TRAINING • Topics: Kanban, BDD & TDD. • When: May 6, 11-12 & 17-18 • More info: http://www.maventhought.com • Goal: Learn techniques, methodologies and tools to improve the quality in your day to day job.Amir Barylko Advanced Design Patterns

×