tworzenie elastycznych aplikacji .net w oparciu o wzorce projektoweinversion of control i dependency...

Post on 29-May-2015

1.473 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Originally presented on IT Academic Day 2008 (Faculty of Mathematics and Computer Science, NCU, Torun)

TRANSCRIPT

Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektowe

Inversion Of Control i Dependency Injection

Marcin Daczkowski, AIS.PLmarcin.daczkowski@ais.pl

Agenda

• Charakterystyka• Zalety i wady• Warianty• Zastosowania

• Przegląd kontenerów• Unity– Architektura– Przykłady użycia

Charakterystyka

Każdy wzorzec określa problem, który wielokrotnie występuje w naszym środowisku,

a następnie opisuje zasadniczą częśćrozwiązania tego problemu.

Christopher Alexander (1977)A Pattern Language: Towns, Buildings, Construction

Inversion of Control

• Wzorzec architektoniczny• Przeniesienie odpowiedzialności• Różne aspekty– Sterowanie– Determinowanie powiązań

Dependency Injection

• Rozwiązuje ten sam problem, co wzorce kreacyjne:– Fabryka Abstrakcyjna–Metoda Wytwórcza–Budowniczy

• Zgodnie z ideą Inversion of Control• Bob Martin - SOLID

• Autor - Martin Fowler

Tight-coupling

A

B

Cużywa

tworzy

używa

Dependency Injection

A

B

ICużywa

tworzy

używa

Dependency Injection + Kontener

A

B

ICużywa

tworzy

używaKontener DI

używa

Service Locator

A

B

ICużywa

tworzy

używa ServiceLocator

używa

Zalety i wady

ZaletyElastyczność

Testowalność

SRP

Automatyzacja procesu kreacji

Centralne zarządzanie

zależnościami

Wady

Niebezpośredniość

Wydajność

Utrudnia zaciemnianie

kodu

Warianty

• Constructor Injection

IC new B(new C()); public B( ) { }

IC var b = new B(); b.C = new C();

public { set; }

• Property Injection

• Interface Injection

IC

var b = new B(); b.InjectC(new C());

void InjectC( c)

B : IInjectC

Zastosowania

Hosty aplikacyjne

• Windows Forms• WPF• ASP.NET Web Forms• ASP.NET MVC• WCF• …

Biblioteki

• Prywatne kontenery• Kontener współdzielony z hostem• Integracja poprzez mechanizmy rozszerzeń

Przegląd kontenerów

• Ninject• Autofac• Structure Map• Unity• Castle Windsor• Spring.NET

Wybrane rozwiązania

Źródło: http://www.codinginstinct.com/2008/04/ioc-container-benchmark-unity-windsor.html

Windsor

StructureMap

Unity

Spring.NET

new()

0 5 10 15 20 25 30 35 40 45 50

1.581

0.802

3.136

1.169

0.03

30,915

36.622

8.164

44.149

0.1

Transient Singleton

Unity

Unity

Object Builder

Object Builder

Atrybuty

TypyG

eneryczne

Tablice

Life

time

Man

ager

s

Konfiguracja

Static Factory…

AOP

Object Builder 2.0

Stra

tegy

Stra

tegy

Stra

tegy

Policy Policy Policy

Locator Lifetime container

DEMO

Pytania?

top related