Code Quality
Ieri stavo debuggando un componente per risolvere una serie di bugs, quando, dopo un buon numero di F11 arrivo a un metodo che prende in input una collection e restituisce una collection dello stesso tipo. La signature è più o meno come questa:
private static List<int> ApplyCustomFilter1(List<int> ints)
E questo assomiglia al codice che lo usa:
List<int> ints = new List<int> { 0, 1, 2, 3 };var filteredInts = ApplyCustomFilter1(ints);// altro codice che lavora su ints e filteredInts
Ok, quelle tre righe mi hanno fatto perdere mezz'ora :(
Il problema è che non posso assumere nulla sulla lista ‘ints’ dopo che il...
StructureMap è un maturo (apparentemente il più vecchio) IoC tool per .Net. Non è mia intenzione in questo post dimostrare come usarlo o spiegarne le funzionalità e neppure parlare di IoC o DI…per quello c’è Google. Piuttosto, mi interessa analizzare l’implementazione di un suo componente, il Registry DSL – riporto dal sito ufficiale:
“The Registry DSL is the recommended way to configure StructureMap, and creating Registry classes is the recommended way of using the Registry DSL. The Registry DSL is mostly a Fluent Interface with some Nested Closure usage. The intent of the Registry DSL is to make the configuration process...
Questo è il primo post di una serie dove proverò ad analizzare come progetti più o meno famosi sono stati implementati.
Parto con Funq, che come descritto dall’autore
“provides a high performance DI framework by eliminating all runtime reflection through the use of lambdas and generic functions as factories.
Developed entirely in C# using TDD, it's a container you can crack open and actually understand to the core.”
Ho colto l’invito e l’ho crack opened. La prima cosa che si nota è quanto la libreria sia compatta e minimalista, meno di 15 files in tutto, di cui:
...
…ma perseverare...arghhh
E dire che mi ero anche riletto questa interessante discussione pochi mesi fa :(
Giusto così poi magari me lo ricordo, riporto qui, velocemente, la cronaca dei fatti.
mi viene richiesto di modificare un componente di un grosso sistema
implemento la modifica (correttamente) e mi stupisco di aver fatto anche abbastanza in fretta
chiacchiero con un collega e gli dico:
sai, ho già finito quella modifica…pensavo peggio
funziona a dovere, ma voglio...