alternative architectures: inversion of control mike hadlow mikehadlow@yahoo.com...

Post on 05-Jan-2016

218 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Alternative Architectures: Inversion of Control

Mike Hadlowmikehadlow@yahoo.commikehadlow.blogspot.com

What am I going to talk about?

• The problem: Application Architecture.• What is Inversion of Control?• Inversion of Control Containers.• A Real Application: Suteki Shop.

Comonent size vs. complexity is not linear

Complexity

Features

Break large pieces into smaller pieces

The goal of good architecture

• Don’t repeat yourself (DRY)• Decreased coupling• Separation of concerns• Reduced cost of change• Greater flexibility• Do more for less ££££

What is a component

Wikipedia says:• Multiple use• Non context specific• Composable with other components• Encapsulated• A unit of independent deployment and

versioning

What is inversion of control?

• A way of designing reusable components• A way of decoupling services• A design pattern not a framework• ‘Inject’ dependencies through constructor or

parameters (Dependency Injection)• It’s easy!

Show me the code

<Demo>

Problems with typical coding techniques

• Difficult or impossible to test• Tightly coupled• Violates the single responsibility principle• Violates the open closed principle

Vocabulary

Service = Interface (IEmailSender)Component = Class (EmailSender)

BUTNot all classes are components

IoC design style

• Systems are composed of small specialised services– Represented by interfaces

• Components declare– The services they provide (by implementation)– The services they require (by DI)

• Components do not dictate their own lifestyle– Do not implement singleton yourself

• Let TDD drive your design

What is an IoC container?

• A (very) smart factory• Automatically resolves dependencies• Automatically injects concrete instances• All services are registered in the container• Single point of access for services• Transparent• Various implementations for .NET

Castle MicroKernel / Windsor

• Part of the Castle Project castleproject.org• Started by Hamilton Verissimo• Also includes:– MonoRail MVC framework for ASP.NET– ActiveRecord based on NHibernate

IoC container example

<demo>

How dependencies are resolved

IReportBuilder

IReportSender

Reporter

Flexibility

<demo>

Lifestyles

• Singleton (the default)• Transient• Per Thread• Pooled• Per Web Request• Custom

A Real Application

http://code.google.com/p/sutekishop/http://sutekishop.co.uk/

<suteki shop demo>

Pros?

• Simpler component architecture• Reduced cost of change• Easy to unit test• Easily move between application

configurations• Ready made configuration (IoC containers)

Cons?

• Not another thing to learn?• Higher level of abstraction• Performance?• Lifestyle mistakes can be hard to diagnose• Can’t do obfuscation and configuration• Maybe it’s time we looked at dynamically

typed languages?

Should I use it?

• Already familiar with OO principles and patterns?

• Already writing unit tests?• Using a statically typed language?

If not, learn how to do these firstDon’t impose an IoC container on a team which

can’t see its benefit

Resources

• Castle Project castleproject.org• Oren Eini ayende.com/blog• Alex Henderson bittercoder.com• ALT NET

http://tech.groups.yahoo.com/group/altdotnet/

Questions?

Mike Hadlowmikehadlow@yahoo.commikehadlow.blogspot.com

top related