Stamattina, al corso che sto tenendo di architettura base, ho presentato ai ragazzi il classico pattern Decorator per servirci poi nell'implementare i vari servizi di validazione, logging, caching, etc., come decoratori di un repository, ispirato da questo post di Ayende. Uno di loro mi ha chiesto se si poteva scrivere il corpo della CreateComponent in modo ancora piu' usabile. E mi e' venuta l'idea di utilizzare un extension method generico fluente, tanto per introdurli un po' anche nel mondo di C# 3.0
Partiamo dall'implementazione standard del pattern:
using System;
public interface IComponent {
void Operation();
}
public class ConcreteComponent : IComponent {
public void Operation() {
Console.WriteLine("ConcreteComponent");
}
}
public abstract...
Questo snippet (di cui manca un pezzo) si esegue in Visual Studio premendo F5 e rimane fermo al breakpoint definito nel codice del metodo Main. Muovendo poi lentamente il mouse sulla finestra dello snippet in Visual Studio, si nota che a volte viene stampato uno smiley :-) a console.
class Quiz {
// da completare
static void Main() {
System.Diagnostics.Debugger.Break(); // breakpoint
}
}
Si chiede di completare il codice che manca.
Senza utilizzare alcun throw, completate il seguente snippet in tal modo che il catch stampi Ciao! a console e tutte e tre le inner exception devono essere di tipi diversi:
using System;
class Quiz {
// ... da completare
static void Main() {
try {
// ... da completare
}
catch (Exception e) {
if(e.InnerException != null && e.InnerException.InnerException != null && e.InnerException.InnerException.InnerException != null) {
Console.WriteLine("Ciao!");
}
}
}
}