• Like
  • Save
decoupling-ea
Upcoming SlideShare
Loading in...5
×
 

decoupling-ea

on

  • 461 views

 

Statistics

Views

Total Views
461
Views on SlideShare
461
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    decoupling-ea decoupling-ea Presentation Transcript

    • AMIR BARYLKO DECOUPLING USING THE EVENT AGGREGATOR .NET USER GROUP MAR 2011Amir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • WHO AM I? • Quality Expert • Architect • Developer • Mentor • Great cook • The one who’s entertaining you for the next hour!Amir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • RESOURCES • Email: amir@barylko.com • Twitter: @abarylko • Blog: http://www.orthocoders.com • Materials: http://www.orthocoders.com/presentationsAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • INTRO Coupling Cohesion Dependencies Dependency Injection IoC ContainersAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • COUPLING & COHESIONAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • COUPLING (WIKIPEDIA) Degree to which each program module relies on each one of the other modulesAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • COUPLING II Is usually contrasted with cohesionAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • COUPLING III Invented by Larry Constantine, an original developer of Structured DesignAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • COUPLING IV Low coupling is often a sign of a well-structured computer system and a good designAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • COUPLING V When combined with high cohesion, supports high readability and maintainabilityAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • COHESION (WIKIPEDIA) measure of how strongly-related the functionality expressed by the source code of a software module isAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • IS ALL ABOUT DEPENDENCIESAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • HARDCODED DEPENDENCIES public MovieLibrary() { this._storage = new LocalStorage(); this._critic = new JaySherman(); this._posterService = new IMDBPosterService(); } Impossible to test or maintain!Amir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • EXTRACT INTERFACES private JaySherman _critic; private IMDBPosterService _posterService; private LocalStorage _storage; private IMovieCritic _critic; private IMoviePosterService _posterService; private IMovieStorage _storage;Amir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • DEPENDENCY INJECTION public MovieLibrary(IMovieStorage storage, IMovieCritic critic, IMoviePosterService posterService) { this._storage = storage; this._critic = critic; this._posterService = posterService; } Better for testing... but who is going to initialize them?Amir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • INVERSION OF CONTROLAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • POOR’S MAN DI public MovieLibrary() { this._storage = new LocalStorage(); this._critic = new JaySherman(); this._posterService = new IMDBPosterService(); } Still testeable... but smells!Amir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • USING IOC CONTAINER Container.Register( Component .For<IMovieCritic>() .ImplementedBy<JaySherman>(), Component .For<IMoviePosterService>() .ImplementedBy<IMDBPosterService>(), Component .For<IMovieStorage>() .ImplementedBy<LocalStorage>());Amir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • REFACTORING What’s wrong? Event Aggregator Demo Desktop &Web applicationsAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • WHAT’S WRONG?Amir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • TOO MANY DEPENDENCIESAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • LET’S THINK • Why the critic has to know the library (or viceversa)? • Or the poster service? • If I need more services, do I add more dependencies to the library?Amir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • DECENTRALIZE • Identify boundaries • Identify clear responsibilities • Reduce complexity • Find notification mechanismAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • WHAT I’D LIKE Reviews Library ???? PostersAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • EVENT AGGREGATORAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • THE PATTERN Channel events from multiple objects into a single object to s i m p l i f y registration for clientsAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • TRAITS • Based on subject - observer • Centralize event registration logic • No need to track multiple objects • Level of indirectionAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • DEMOAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • WHAT WE NEED •Register events •Raise events •Subscribe to eventsAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • IMPLEMENTATIONAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • WHAT’S NEXT? •Show movies •Add notification to show posters •Add notification to show reviewsAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • QUESTIONS?Amir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • RESOURCES • Email: amir@barylko.com • Twitter: @abarylko • Presentation: http://www.orthocoders.com/presentations • Source Code: https://github.com/amirci/decoupling_mar_11Amir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • RESOURCES II •Coupling: http://en.wikipedia.org/wiki/Coupling_(computer_programming) •Event Aggregator: http://martinfowler.com/eaaDev/EventAggregator.html MavenThought Commons:https://github.com/amirci/mt_commons •Bootstrapper:http://bootstrapper.codeplex.com/ •Windsor Container:http://www.castleproject.org/container/Amir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • TDD TRAINING • When: May 26 & 27 • More info: http://www.maventhought.com • Goal: Learn TDD with real hands on examplesAmir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011
    • AGILE USER GROUP • Check it out! : http://www.agilewinnipeg.com • Apr 5: Agile Planning • May: Agile Stories • Jun: Testing?Amir Barylko - .NET UG Mar ‘11 MavenThought Inc.Wednesday, March 30, 2011