SlideShare a Scribd company logo
1 of 36
Download to read offline
AMIR BARYLKO
                            DECOUPLING
                                     USING THE

                              EVENT
                            AGGREGATOR

                                 .NET USER GROUP
                                     MAR 2011

Amir 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/presentations




Amir Barylko - .NET UG Mar ‘11                          MavenThought Inc.
Wednesday, March 30, 2011
INTRO
                                      Coupling
                                      Cohesion
                                    Dependencies
                                 Dependency Injection
                                   IoC Containers


Amir Barylko - .NET UG Mar ‘11                          MavenThought Inc.
Wednesday, March 30, 2011
COUPLING & COHESION




Amir 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 modules

Amir Barylko - .NET UG Mar ‘11                  MavenThought Inc.
Wednesday, March 30, 2011
COUPLING II

    Is usually contrasted
                     with cohesion



Amir Barylko - .NET UG Mar ‘11                 MavenThought Inc.
Wednesday, March 30, 2011
COUPLING III

    Invented by Larry Constantine,
    an original developer of
               Structured Design


Amir 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 design

Amir Barylko - .NET UG Mar ‘11             MavenThought Inc.
Wednesday, March 30, 2011
COUPLING V

    When combined with
    high cohesion,
    supports high
                  readability and
                  maintainability
Amir 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 is
Amir Barylko - .NET UG Mar ‘11                  MavenThought Inc.
Wednesday, March 30, 2011
IS ALL ABOUT
                            DEPENDENCIES




Amir 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 CONTROL




Amir 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 applications



Amir 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 DEPENDENCIES




Amir 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 mechanism

Amir Barylko - .NET UG Mar ‘11             MavenThought Inc.
Wednesday, March 30, 2011
WHAT I’D LIKE


                                          Reviews


                    Library        ????

                                              Posters



Amir Barylko - .NET UG Mar ‘11                    MavenThought Inc.
Wednesday, March 30, 2011
EVENT AGGREGATOR




Amir 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
       clients
Amir 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 indirection


Amir Barylko - .NET UG Mar ‘11                              MavenThought Inc.
Wednesday, March 30, 2011
DEMO




Amir Barylko - .NET UG Mar ‘11          MavenThought Inc.
Wednesday, March 30, 2011
WHAT WE NEED

    •Register                    events
    •Raise                  events
    •Subscribe                    to events

Amir Barylko - .NET UG Mar ‘11                MavenThought Inc.
Wednesday, March 30, 2011
IMPLEMENTATION




Amir 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 reviews


Amir 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_11




Amir 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 examples




Amir 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

More Related Content

What's hot

prdc10-Bdd-real-world
prdc10-Bdd-real-worldprdc10-Bdd-real-world
prdc10-Bdd-real-worldAmir Barylko
 
PRDC-ror-trilogy-part1
PRDC-ror-trilogy-part1PRDC-ror-trilogy-part1
PRDC-ror-trilogy-part1Amir Barylko
 
CodeCamp 2012-mvc-vs-ror-2
CodeCamp 2012-mvc-vs-ror-2CodeCamp 2012-mvc-vs-ror-2
CodeCamp 2012-mvc-vs-ror-2Amir Barylko
 
Cpl12 continuous integration
Cpl12 continuous integrationCpl12 continuous integration
Cpl12 continuous integrationAmir Barylko
 
PRDCW-avent-aggregator
PRDCW-avent-aggregatorPRDCW-avent-aggregator
PRDCW-avent-aggregatorAmir Barylko
 

What's hot (7)

prdc10-Bdd-real-world
prdc10-Bdd-real-worldprdc10-Bdd-real-world
prdc10-Bdd-real-world
 
PRDC-ror-trilogy-part1
PRDC-ror-trilogy-part1PRDC-ror-trilogy-part1
PRDC-ror-trilogy-part1
 
CodeCamp 2012-mvc-vs-ror-2
CodeCamp 2012-mvc-vs-ror-2CodeCamp 2012-mvc-vs-ror-2
CodeCamp 2012-mvc-vs-ror-2
 
Cpl12 continuous integration
Cpl12 continuous integrationCpl12 continuous integration
Cpl12 continuous integration
 
PRDCW-avent-aggregator
PRDCW-avent-aggregatorPRDCW-avent-aggregator
PRDCW-avent-aggregator
 
obs-tdd-intro
obs-tdd-introobs-tdd-intro
obs-tdd-intro
 
Capybara1
Capybara1Capybara1
Capybara1
 

More from Amir Barylko

Functional converter project
Functional converter projectFunctional converter project
Functional converter projectAmir Barylko
 
Elm: delightful web development
Elm: delightful web developmentElm: delightful web development
Elm: delightful web developmentAmir Barylko
 
User stories deep dive
User stories deep diveUser stories deep dive
User stories deep diveAmir Barylko
 
Coderetreat hosting training
Coderetreat hosting trainingCoderetreat hosting training
Coderetreat hosting trainingAmir Barylko
 
There's no charge for (functional) awesomeness
There's no charge for (functional) awesomenessThere's no charge for (functional) awesomeness
There's no charge for (functional) awesomenessAmir Barylko
 
What's new in c# 6
What's new in c# 6What's new in c# 6
What's new in c# 6Amir Barylko
 
Who killed object oriented design?
Who killed object oriented design?Who killed object oriented design?
Who killed object oriented design?Amir Barylko
 
From coach to owner - What I learned from the other side
From coach to owner - What I learned from the other sideFrom coach to owner - What I learned from the other side
From coach to owner - What I learned from the other sideAmir Barylko
 
Communication is the Key to Teamwork and productivity
Communication is the Key to Teamwork and productivityCommunication is the Key to Teamwork and productivity
Communication is the Key to Teamwork and productivityAmir Barylko
 
Acceptance Test Driven Development
Acceptance Test Driven DevelopmentAcceptance Test Driven Development
Acceptance Test Driven DevelopmentAmir Barylko
 
Agile requirements
Agile requirementsAgile requirements
Agile requirementsAmir Barylko
 
Agile teams and responsibilities
Agile teams and responsibilitiesAgile teams and responsibilities
Agile teams and responsibilitiesAmir Barylko
 
Beutiful javascript with coffeescript
Beutiful javascript with coffeescriptBeutiful javascript with coffeescript
Beutiful javascript with coffeescriptAmir Barylko
 
Rich UI with Knockout.js &amp; Coffeescript
Rich UI with Knockout.js &amp; CoffeescriptRich UI with Knockout.js &amp; Coffeescript
Rich UI with Knockout.js &amp; CoffeescriptAmir Barylko
 

More from Amir Barylko (20)

Functional converter project
Functional converter projectFunctional converter project
Functional converter project
 
Elm: delightful web development
Elm: delightful web developmentElm: delightful web development
Elm: delightful web development
 
Dot Net Core
Dot Net CoreDot Net Core
Dot Net Core
 
No estimates
No estimatesNo estimates
No estimates
 
User stories deep dive
User stories deep diveUser stories deep dive
User stories deep dive
 
Coderetreat hosting training
Coderetreat hosting trainingCoderetreat hosting training
Coderetreat hosting training
 
There's no charge for (functional) awesomeness
There's no charge for (functional) awesomenessThere's no charge for (functional) awesomeness
There's no charge for (functional) awesomeness
 
What's new in c# 6
What's new in c# 6What's new in c# 6
What's new in c# 6
 
Productive teams
Productive teamsProductive teams
Productive teams
 
Who killed object oriented design?
Who killed object oriented design?Who killed object oriented design?
Who killed object oriented design?
 
From coach to owner - What I learned from the other side
From coach to owner - What I learned from the other sideFrom coach to owner - What I learned from the other side
From coach to owner - What I learned from the other side
 
Communication is the Key to Teamwork and productivity
Communication is the Key to Teamwork and productivityCommunication is the Key to Teamwork and productivity
Communication is the Key to Teamwork and productivity
 
Acceptance Test Driven Development
Acceptance Test Driven DevelopmentAcceptance Test Driven Development
Acceptance Test Driven Development
 
Refactoring
RefactoringRefactoring
Refactoring
 
Agile requirements
Agile requirementsAgile requirements
Agile requirements
 
Agile teams and responsibilities
Agile teams and responsibilitiesAgile teams and responsibilities
Agile teams and responsibilities
 
Refactoring
RefactoringRefactoring
Refactoring
 
Beutiful javascript with coffeescript
Beutiful javascript with coffeescriptBeutiful javascript with coffeescript
Beutiful javascript with coffeescript
 
Sass & bootstrap
Sass & bootstrapSass & bootstrap
Sass & bootstrap
 
Rich UI with Knockout.js &amp; Coffeescript
Rich UI with Knockout.js &amp; CoffeescriptRich UI with Knockout.js &amp; Coffeescript
Rich UI with Knockout.js &amp; Coffeescript
 

Recently uploaded

Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 

Recently uploaded (20)

Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 

decoupling-ea

  • 1. AMIR BARYLKO DECOUPLING USING THE EVENT AGGREGATOR .NET USER GROUP MAR 2011 Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 2. 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
  • 3. RESOURCES • Email: amir@barylko.com • Twitter: @abarylko • Blog: http://www.orthocoders.com • Materials: http://www.orthocoders.com/presentations Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 4. INTRO Coupling Cohesion Dependencies Dependency Injection IoC Containers Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 5. COUPLING & COHESION Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 6. COUPLING (WIKIPEDIA) Degree to which each program module relies on each one of the other modules Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 7. COUPLING II Is usually contrasted with cohesion Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 8. COUPLING III Invented by Larry Constantine, an original developer of Structured Design Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 9. COUPLING IV Low coupling is often a sign of a well-structured computer system and a good design Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 10. COUPLING V When combined with high cohesion, supports high readability and maintainability Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 11. COHESION (WIKIPEDIA) measure of how strongly-related the functionality expressed by the source code of a software module is Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 12. IS ALL ABOUT DEPENDENCIES Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. INVERSION OF CONTROL Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 17. 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
  • 18. 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
  • 19. REFACTORING What’s wrong? Event Aggregator Demo Desktop &Web applications Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 20. WHAT’S WRONG? Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 21. TOO MANY DEPENDENCIES Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 22. 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
  • 23. DECENTRALIZE • Identify boundaries • Identify clear responsibilities • Reduce complexity • Find notification mechanism Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 24. WHAT I’D LIKE Reviews Library ???? Posters Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 25. EVENT AGGREGATOR Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 26. THE PATTERN Channel events from multiple objects into a single object to s i m p l i f y registration for clients Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 27. TRAITS • Based on subject - observer • Centralize event registration logic • No need to track multiple objects • Level of indirection Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 28. DEMO Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 29. WHAT WE NEED •Register events •Raise events •Subscribe to events Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 30. IMPLEMENTATION Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 31. WHAT’S NEXT? •Show movies •Add notification to show posters •Add notification to show reviews Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 32. QUESTIONS? Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 33. RESOURCES • Email: amir@barylko.com • Twitter: @abarylko • Presentation: http://www.orthocoders.com/presentations • Source Code: https://github.com/amirci/decoupling_mar_11 Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 34. 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
  • 35. TDD TRAINING • When: May 26 & 27 • More info: http://www.maventhought.com • Goal: Learn TDD with real hands on examples Amir Barylko - .NET UG Mar ‘11 MavenThought Inc. Wednesday, March 30, 2011
  • 36. 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