An Introduction to Dependency Inversion Principle
Upcoming SlideShare
Loading in...5
×
 

An Introduction to Dependency Inversion Principle

on

  • 1,744 views

Introduces what is Inversion of Control, Dependency Injection and How they relates to the Dependency Inversion Principle

Introduces what is Inversion of Control, Dependency Injection and How they relates to the Dependency Inversion Principle

Statistics

Views

Total Views
1,744
Views on SlideShare
1,743
Embed Views
1

Actions

Likes
1
Downloads
12
Comments
0

1 Embed 1

http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

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

An Introduction to Dependency Inversion Principle An Introduction to Dependency Inversion Principle Presentation Transcript

  • Dependency Inversion Principle
    By DunithDhanushka
  • Agenda
    Walkthrough of a real world scenario.
    What is Inversion of Control?
    What is Dependency Injection?
    Multiple forms of Dependency Injection
    IoC Containers
    R.I.P Steve Jobs (1955 -2011)!
  • SOLID Principles
    Single Responsibility Principle
    Open Closed Principle
    Lizkov’s Substitution Principle
    Interface Segregation Principle
    Dependency Inversion Principle
  • Meet Joe the developer!!
  • Joe’s contract is to build a IMDB clone!
  • First cut of the Movie Lister app
  • Problems with it
    Can’t extend the application without modifying the existing code.
    Violates Open/Closed principle!!! :S
  • Introduction of Interfaces
  • New Movie Lister App
  • Issues of new Movie Lister
    MovieLister class has to talk to both interface and implementation!!
    This makes MovieLister less portable.
    This makes MovieLister less reusable.
    Switching implementations requires a code change! :@
    Hard to unit test.
  • How can we fix this???
  • Its IT! We got remedy! ;)
    Using Setters ( Use a setter to set a Finder instance for MovieLister)
    Passing a Finder instance as constructor argument for MovieLister
    Use a Factory of Finders for MovieLister
    Use a ServiceLocator
  • Using a setter
  • What really happened there?
    MovieLister depends on the Finder
    Previously, MovieLister took the control of initiating it’s dependency.
    But in new version, dependency has been instantiated by some other party for the MovieLister.
    This is called “Inversion of Control” (IoC)
  • This makes MovieLister
    Share across other developers.
    Makes portable.
    Encourages unit testing.
    Preserves OCP (Movie Lister doesn’t know any thing about its crappy implementers. Also plugging a new Finder doesn’t require a code change)
    Enables the use of Mock Objects.
  • Ways to achieve IoC
    Dependency Injection
    Dependency Inversion Principle
    A. High-level modules should not depend on low-level modules. Both should depend on abstractions.
    B. Abstractions should not depend upon details. Details should depend upon abstractions.
    Coined by Martin Fowler
  • Methods of DI
    Constructor Injection
    Setter Injection
    Interface Injection
  • IoC Containers
    How does an IoC container works?
  • Popular IoC containers for Java
    Pico Container
    Spring
    JBoss Micro kernel
    Google Guice
    OSGi ( sort of DI, but very advanced)
  • Joe managed to save his head!
    Joe used Spring container.
    He implemented the MovieLister as a Spring bean.
    In the beans.xml file, he wired the specific Finder implementation to it’s interface!
    Voila!
  • Thank you!
    We’ll meet in the next week with more Spring examples!
    Adios!