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

Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
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
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
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
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 

Recently uploaded (20)

Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
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
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
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...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 

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