inversion of control @ cd2008
Post on 06-Dec-2014
536 Views
Preview:
DESCRIPTION
TRANSCRIPT
Realizzare applicazioni estendibili e configurabili
Ambizioso?
Mauro Servienti
Microsoft MVP - Visual C#
Software Mason @ Managed Designs S.r.l.
mauro.servienti@manageddesigns.it
Agenda
• Perchè?• Il “problema”;• Dogmi:
– Open Closed Principle;– Single Point of Responsability;
• Best Practice(s);• Inversion Of Control;• Chain Of Responsability;• Una voce fuori dal coro: System.AddIn;
• La bacchetta magica non esiste:– Ogni volta è una nuova avventura;– Non c’è una ricetta che vada bene per tutte le
salse ;-)– Esistono i Design Pattern....ma...
• Partire dai Pattern è rischioso:– Rischia di farci perdere la visione concreta del
progetto;– Refactoring to Pattern: “software mason”;
IMHO
ESTENSIBILITÀ... WHO CARES?
Perchè abbiamo bisogno di realizzare applicazioni estensibili.
• Supporto per l’integrazione e l’interoperabilità;
• Consente di modificare a caldo il comportamento;
• Elevatissima manutenibilità;• Verticalizzazione;• Testing;• Può essere un’ottimo “strumento”
commerciale;
Perchè?
LE DIPENDENZE STATICHEUn primo approccio al problema
il problema: le dipendenze statiche
Componente
ComAComponente
ComB
Componente
ComA
Componente
ComB
Interfaccia
IComB
Il cammino verso la soluzione...
...to be continued
I PRINCIPI GUIDAFobia da “dipendenza statica”?, un faro nella nebbia...
Open Closed Principle
“software entities should be open for extension, but closed for modification”
• Open for Extension:– Il componente deve essere estendibile;
• Closed for Modification:– L’estensione non deve portare ad una
rottura del rapporto;
Ma in soldoni?
• Quello che vogliamo evitare è che una semplice modifica in un punto si propaghi a macchi d’olio in tutta l’applicazione;– Eg: sostituibilità a “caldo” del DAL
• Se abbiamo un riferimento al DAL concreto non siamo “Closed”;
• Se facciamo assunzioni particolari non siamo “Closed”;
Non “Closed”
Single Point of Responsability
• Ad ognuno il suo ruolo;• Lo scope del ruolo assegnato deve
essere il più preciso possibile (focuse);
• Se ad un componente assegno più responsabilità violo l’Open Closed Principle;
Troppe responsabilità
BEST PRACTICE(S)Il panico da “Empty Solution”
Scrivere in ottica estensibilità
• Interfaces vs. Abstract classes;• Pensare agli entry point;• Prevedere quali dati potranno essere
necessari;• Le “pipeline”, un esempio da seguire:
– HttpModule, HttpHanlder;• Refactoring, refactoring, refactoring,
refactoring e ancora refactoring;
Interfaces vs. Abstract classes
Interface• Posso simulare
ereditarietà multipla;• Non “brucio” l’unico punto
di inheritance
Abstract Class• Mi permette di fornire
un’implementazione di base alle classi derivate;
• Colgo il meglio dei due mondi:• Interface verso il chiamante;• Abstract Class(es) nel modello;
Quindi?
Il meglio dei due mondi (1)
Il meglio dei due mondi (2)
...to be continued
Entry Point
• Dove avrò bisogno di estendere:– Ovunque ;-), mai chiudersi le porte...
• Un esempio: la “Conversazione”– è la Session? Si;– Perchè non usare la Session? E se
domani mattina la Session non mi andasse più bene?
– Mettiamo le mani avanti: “Facade”
Mascheriamo
...ma dietro le quinte?
• Slega il nostro modello da Asp.Net;– Siamo “Open”!;
• Quanto abbiamo investito?
Prevedere...
• Non abbiamo la sfera di cristallo• Incapsulare i dati in classi adatte al
loro trasporto: – EventArgs;– CancelEventArgs;– CustomEventArgs : estendiamo
CancelEventArgs/EventArgs
“Trasportare” i dati
• le informazioni non sono sufficienti
• ...non compila più: non siamo “Closed”
Le “pipeline”
• “pipeline”, un esempio da seguire:– HttpModule + HttpHanlder;
IProcessor
AIProcessor
BIProcessor
CIProcessor
n
Request
Data
Le “pipeline” (code)
Inversion of Control
Componente
ComA
Componente
ComB
Interfaccia
IComBServiceProvider(IoC Container)
IoCConfig
DEMOVediamolo in azione....
IoC Containers e non solo
• StructureMap;• Castle Windsor;• Spring.NET• Unity (Enterprise Library 4.0)
I’ve got the power <cit.>
• Se volessimo cambiare l’ordine...?• Se volessimo aggiungere/rimuovere
step...?• Se volessimo fare il tutto “a caldo”...?
DEMOVediamolo in azione....
IoC Containers: cosa offrono
• Contenitore di Servizi;• Lifecycle management;• Policy Injection (interceptors);
• Difetti? Si la gestione della configurazione...
DOMANDE?Non sparate sul pianista....
IL MODULO DI FEEDBACKGrazie a tutti, mi raccomando...
top related