Alkampfer's Place

Il blog di Gian Maria Ricci
posts - 659, comments - 871, trackbacks - 80

My Links

News

Gian Maria Ricci Mvp Logo CCSVI in Multiple Sclerosis

English Blog

Tag Cloud

Article Categories

Archives

Post Categories

Image Galleries

I miei siti

Siti utili

Castle o Spring?

Una delle domande principale che mi faccio talvolta parlando di IoC e di AOP è se utilizzare castle o spring...Spring è una libreria in giro da più tempo e più matura, la documentazione inoltre è migliore di quella di Castle effettivamente, ma se dovessi scegliere sceglierei Castle, per una serie di motivi.

Il primo motivo è le API pubbliche che si utilizzano, Castle.Windsor è fortemente tipizzato, ad esempio per recuperare un istanza si usa questo codice

MyInterface instance = _container.Resolve<MyInterface>();

dove naturalmente _container è un istanza di WindsorContainer che possiamo ottenere da un file xml di configurazione o da una sezione nell'app.config. Il parallelo di un WindsorContainer in Spring è un IApplicationContext (analoga configurazione)

MyInterface instance = (MyInterface) ac["MyInterfaceName"];

La differenza sostanziale che noi possiamo chiedere a Windsor "dammi l'istanza di default che implementa l'interfaccia MyInterface", mentre in spring si deve sempre fornire il nome dell'oggetto inserito nella configurazione ed è necessario inserire un cast. La differenza è minima, ma Windsor mi piace maggiormente perchè è più da "design by contract". Stabilito infatti che l'interfaccia è un contratto, posso chiedergli l'oggetto concreto per quel contratto.

Alk.

P.S. Naturalmente anche in spring posso fare una cosa del genere, ma debbo scrivere più codice

IDictionary returnvalue = ActualContainer.GetObjectsOfType(typeof(T)); foreach (T instance in returnvalue.Values) { return instance; } throw new ApplicationException("nessun oggetto configurato che implementa " + typeof(T).Name);

In generale in spring posso prendere tutti gli oggetti che implementano un dato tipo, questo torna un dictionary di coppie nome valore dove nome è l'id del componente configurato e il valore è un istanza dell'oggetto. Oltre ad essere poco leggibile come codice, ogni volta che desidero un componente di default lui istanzia comunque tutti gli oggetti che implementano T e gli altri vengono semplicemente scartati.

Print | posted on mercoledì 1 agosto 2007 19:42 | Filed Under [ .NET ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET