taming dependency chaos with inversion of control containers
DESCRIPTION
Taming Dependency Chaos with Inversion of Control Containers. Steve Bohlen Senior Software Engineer SpringSource /VMware E-Mail: [email protected] Blog: http://blog.unhandled-exceptions.com Twitter: @ sbohlen. Do I suck?. Let me (and the world) know!. http://spkr8.com/t/8097. Who am I?. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/1.jpg)
St Louis Day of .NET 2011
Taming Dependency Chaoswith Inversion of Control Containers
Steve BohlenSenior Software EngineerSpringSource/VMware
E-Mail: [email protected]: http://blog.unhandled-exceptions.comTwitter: @sbohlen
![Page 2: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/2.jpg)
![Page 3: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/3.jpg)
St Louis Day of .NET 2011
Do I suck?Let me (and the world) know!
http://spkr8.com/t/8097
![Page 4: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/4.jpg)
St Louis Day of .NET 2011
Who am I?• …and why should you care?• Steve Bohlen• I Read Books + Write Software• vs. “Read Software + Write Books”
• Blog, Screencast, Speak, Share, Learn
![Page 5: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/5.jpg)
St Louis Day of .NET 2011
Steve BohlenNearly 20 years developing softwareLISP, Delphi, C/C++, VB, VB.NET, C#Senior Engineer Springsource/VMwareCo-Founder, NYC Alt.Net User Group
http://nyalt.netCo-Organizer, NYC DDD User Group
http://dddnyc.orgContributor: various OSS projects
Nhibernate http://www.nhforge.orgNDbUnit http://www.googlecode.com/ndbunitSpring.NET http://www.springframework.net
blog: http://blog.unhandled-exceptions.come-mail: [email protected]: @sbohlen
CYND D D
![Page 6: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/6.jpg)
St Louis Day of .NET 2011
RAD Controls for ASP.NET AJAX
RAD Controls for Silverlight
RAD Controls for Windows Phone
RAD Controls for Winforms
RAD Controls for WPF
Telerik Reporting
Telerik OpenAccess ORM
Telerik JustCode
Telerik JustMock
Telerik Extensions for ASP.NET MVC
Test Studio Express
Telerik TeamPulse
Telerik Test Studio
Sitefinity CMS
Telerik JustDecompile
C#/VB.NET Converter
ASPX to Razor Converter
![Page 7: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/7.jpg)
St Louis Day of .NET 2011
![Page 8: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/8.jpg)
St Louis Day of .NET 2011
![Page 9: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/9.jpg)
St Louis Day of .NET 2011
![Page 10: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/10.jpg)
St Louis Day of .NET 2011
How much can you keep in your Head?
![Page 11: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/11.jpg)
St Louis Day of .NET 2011
Our Application (or class, or method, etc.)
![Page 12: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/12.jpg)
St Louis Day of .NET 2011
First Attempt at Decomposition
Components!
![Page 13: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/13.jpg)
St Louis Day of .NET 2011
Ideal Decomposition Level
Units!
![Page 14: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/14.jpg)
St Louis Day of .NET 2011
The Challenge:Turning this into something useful
Decomposition carries overhead…
…of re-composition for meaningful work!
![Page 15: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/15.jpg)
St Louis Day of .NET 2011
…easily!
The Goal:Units Assembled into Something Useful…
![Page 16: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/16.jpg)
St Louis Day of .NET 2011
Code Demo: Refactoring for Decomposition
![Page 17: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/17.jpg)
St Louis Day of .NET 2011
Reviewing Our Dependency Graph after Decomposition
Logger
ConnectionManager
DataSorter
Logger
Logger
Logger
DataAccessWorker
DataPrinter Logger
![Page 18: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/18.jpg)
St Louis Day of .NET 2011
Code Demo: Refactoring to Ease (Re-)Composition
![Page 19: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/19.jpg)
St Louis Day of .NET 2011
Reviewing Our Dependency Graph after IoC
ConnectionManager
DataSorter
Logger
DataAccess
Worker
Container
Construction Dependency
Graph
Functional Dependencies
Remain as BeforeDataPrinter
![Page 20: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/20.jpg)
St Louis Day of .NET 2011
Aspect-Oriented Programming (AOP)
![Page 21: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/21.jpg)
St Louis Day of .NET 2011
(one of) The Challenges ofOO Software Design
• Not all common behaviors can be efficiently modeled by OO paradigms– Inheritance, Dependency Injection / Inversion of Control
• Simple Examples– Logging, Authorization, Transactions, Exceptions
• …more…
• We call these concerns of our application– They are all things our objects must ‘concern’ themselves with doing
• Because they cut across many objects in our application…– …we call them cross-cutting concerns
![Page 22: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/22.jpg)
St Louis Day of .NET 2011
Example: Logging by Inheritance
public abstract class LoggingBase{ protected void Log(string msg) {…}} Public class Service1 : LoggingBase {…}
Public class Service2 : LoggingBase {…}
Public class Service3 : LoggingBase {…}Common Abstract
Base Class …
Awkward!
Rigid hierarchy!
How do you add logging after you design your application???
Inherit from Common
Base
![Page 23: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/23.jpg)
St Louis Day of .NET 2011
Public class Service1{ public Service1 (Logger logger) { _logger = logger; }}
Example: Logging by Dependency Injection
Public class Logger{ public void Log(string msg) {…}}
Dependency
Awkward! Inject Logger
Everywhere!
How do you add logging after you design your application???
Constructor Injection
![Page 24: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/24.jpg)
St Louis Day of .NET 2011
The Promise of Aspect-Oriented Programming
• All (most) applications have these cross-cutting concerns– For fun (and because it’s a common convention) let’s call
them Aspects• Aspects can be applied to objects in our solution using
AOP tools– Broadly applied to many classes in our solution– Minimally-invasive– Non-Manual introduction of Aspects
• Not by literal coding (directly)
![Page 25: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/25.jpg)
St Louis Day of .NET 2011
Understanding AOP Terms
Cross-Cutting Concernsthe ‘problem’ we want to solve
Advicecode that solves the problem
Pointcutwhere to apply the Advice
AspectPointcut + Advice = Aspect
![Page 26: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/26.jpg)
St Louis Day of .NET 2011
Code Demo: Defining and Applying Aspects
![Page 27: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/27.jpg)
St Louis Day of .NET 2011
Reviewing Our Dependency Graph after IoC
ConnectionManager
DataSorter
Logger
DataAccess
DoSomeWork
Container
Construction Dependency
Graph
Functional Dependencies
Remain as BeforeDataPrinter
![Page 28: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/28.jpg)
St Louis Day of .NET 2011
Reviewing Our Dependency Graph after AOP
ConnectionManager
DataAccess
DoSomeWork
Container
DataSorter
Logger
Logger
Logger
Logger
DataPrinter Logger
![Page 29: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/29.jpg)
St Louis Day of .NET 2011
Understanding the Mechanics of AOP
Advised Type Advice
Your Code
Type with Advice Applied
IoC
![Page 30: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/30.jpg)
St Louis Day of .NET 2011
Thinking About Re-Assembly
Presto!
![Page 31: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/31.jpg)
St Louis Day of .NET 2011
Dependency Injection Frameworks• StructureMap• Spring.NET• Castle Windsor• NInject• Funq• Unity• More…
![Page 32: Taming Dependency Chaos with Inversion of Control Containers](https://reader035.vdocuments.us/reader035/viewer/2022062310/56816384550346895dd46930/html5/thumbnails/32.jpg)
St Louis Day of .NET 2011
fini
Steve BohlenSenior Software EngineerSpringSource/VMware
E-Mail: [email protected]: http://blog.unhandled-exceptions.comTwitter: @sbohlen
http://spkr8.com/t/8097