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

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
 
"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
 
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
 
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
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbuapidays
 
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
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
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
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
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
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...apidays
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
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
 
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
 
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
 

Recently uploaded (20)

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
 
"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 ...
 
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 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 Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
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
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
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
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
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...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
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
 
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
 
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...
 

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