Your SlideShare is downloading. ×
PRDCW-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

PRDCW-advanced-design-patterns

364
views

Published on

Presentation done at PRDC west about design patterns and anti patterns

Presentation done at PRDC west about design patterns and anti patterns


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

  • Be the first to like this

No Downloads
Views
Total Views
364
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
8
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 PATTERNSAmir 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. 18 • Event Sourcing • Null Object 22 • Proxy 1 • Factory 4 • List • ActiveRecord 12 Comprehension • Strategy 11 1 • Repository 5 • DTO 4 • Object Mother10 • Event Aggregator • Page Object 16 26 • Visitor 8Amir 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. SnapToX Next SnapToY SnapToPrevious NextAmir Barylko Advanced Design Patterns
  • 13. Amir Barylko Advanced Design Patterns
  • 14. 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
  • 15. GOFAmir Barylko Advanced Design Patterns
  • 16. PROXY SEQUENCEAmir Barylko Advanced Design Patterns
  • 17. 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
  • 18. 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
  • 19. movie = Movie.new movie.all # all records # filter by title movie.where(title: Spaceballs) # finds by attribute movie.find_by_title(Blazing Saddles) # order, skip some and limit the result movie.order(title DESC).skip(2).limit(5) # associations CRUD movie.reviews.create(name: Jay Sherman, stars: 1, comment: It stinks!)Amir Barylko Advanced Design Patterns
  • 20. REPOSITORY • Mediator between domain and storage • Acts like a collection of items • Supports queries • Abstraction of the storageAmir Barylko Advanced Design Patterns
  • 21. Amir Barylko Advanced Design Patterns
  • 22. http://martinfowler.com/eaaCatalog/repository.htmlAmir Barylko Advanced Design Patterns
  • 23. ANTIPATTERN CHEAPER BY THE DOZENAmir Barylko Advanced Design Patterns
  • 24. WHAT TO DO? • Use a criteria or better a queryable result (LINQ) • Use a factory to return repositories • Use a UnitOfWork with a factoryAmir Barylko Advanced Design Patterns
  • 25. 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
  • 26. 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
  • 27. MT COMMONSAmir Barylko Advanced Design Patterns
  • 28. COUPLEDAmir Barylko Advanced Design Patterns
  • 29. DECOUPLEDAmir Barylko Advanced Design Patterns
  • 30. EVENT SOURCING • Register all changes in the application using events • Event should be persisted • Complete Rebuild • Temporal Query • Event ReplayAmir Barylko Advanced Design Patterns
  • 31. http://martinfowler.com/eaaDev/EventSourcing.htmlAmir Barylko Advanced Design Patterns
  • 32. Amir Barylko Advanced Design Patterns
  • 33. 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
  • 34. 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
  • 35. OBJECT MOTHER / BUILDER • Creates an object for testing (or other) purposes • Assumes defaults • Easy to configure • Fluent interface • Usually has methods to to easily manipulate the domainAmir Barylko Advanced Design Patterns
  • 36. 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
  • 37. Amir Barylko Advanced Design Patterns
  • 38. 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
  • 39. LINQ EXPRESSION TREEAmir Barylko Advanced Design Patterns
  • 40. EXPRESSION VISITORAmir Barylko Advanced Design Patterns
  • 41. AND EXPR EVALUATIONAmir Barylko Advanced Design Patterns
  • 42. NULL OBJECT • Represent “null” with an actual instance • Provides default functionality • Clear semantics of “null” for that domainAmir Barylko Advanced Design Patterns
  • 43. 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
  • 44. 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
  • 45. 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
  • 46. STRATEGY • Abstracts the algorithm to solve a particular problem • Can be configured dynamically • Are interchangeableAmir Barylko Advanced Design Patterns
  • 47. http://orthocoders.com/2010/04/Amir Barylko Advanced Design Patterns
  • 48. DATA TRANSFER OBJECT • Simplifies information transfer across services • Can be optimized • Easy to understandAmir Barylko Advanced Design Patterns
  • 49. http://martinfowler.com/eaaCatalog/dataTransferObject.htmlAmir Barylko Advanced Design Patterns
  • 50. 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
  • 51. class ProjectListPage include PageObject def navigate visit(/projects) self end def edit(project) row = find(:xpath, "//td[.=#{project.name}]") row.parent.click_link(Edit) ProjectEditPage.new end def projects all(:css, "#projects tr")...... end endAmir Barylko Advanced Design Patterns
  • 52. When /^I go to the projects page$/ do project_list_page.navigate end When /^I activate the project$/ do project_list_page. navigate. edit(current_project). activate. save endAmir Barylko Advanced Design Patterns
  • 53. QUESTIONS?Amir Barylko Advanced Design Patterns
  • 54. RESOURCES • Email: amir@barylko.com, @abarylko • Slides: http://www.orthocoders.com/presentations • Patterns: Each pattern example has a linkAmir Barylko Advanced Design Patterns
  • 55. RESOURCES IIAmir Barylko Advanced Design Patterns
  • 56. RESOURCES IIIAmir Barylko Advanced Design Patterns
  • 57. QUALITY SOFTWARE TRAINING • Topics: Kanban, BDD & TDD. • When: May 4, 10-11 & 16-17 • More info: http://www.maventhought.com • Goal: Learn techniques, methodologies and tools to improve the quality in your job.Amir Barylko Advanced Design Patterns