Attualmente sto cercando di ridefinire un po 'di codice e uno dei problemi che ho riscontrato è che i costruttori avevano troppi parametri (15 in effetti) e sono stati inizializzati da un altro oggetto che aveva la stessa quantità di proprietà.
Ho intenzione di ridurre la quantità di classi che abbiamo quindi creando una serie di classi che rappresentavano le diverse parti dei parametri, sembrava sciocco quindi ho iniziato a cercare e la risposta migliore che ho trovato è stata da questa domanda su stackoverflow .
public class DoSomeActionParameters
{
readonly string _a;
readonly int _b;
public string A { get { return _a; } }
public int B{ get { return _b; } }
DoSomeActionParameters(Initializer data)
{
_a = data.A;
_b = data.B;
}
public class Initializer
{
public Initializer()
{
A = "(unknown)";
B = 88;
}
public string A { get; set; }
public int B { get; set; }
}
public static DoSomeActionParameters Create(Action<Initializer> assign)
{
var i = new Initializer();
assign(i)
return new DoSomeActionParameters(i);
}
}
che può essere chiamato così usando un lambda
DoSomeAction(
DoSomeActionParameters.Create(
i => {
i.A = "Hello";
})
);
Mi è piaciuto molto questo metodo anche se non risolve direttamente il problema di inizializzare effettivamente la classe, vuol dire che posso avere un costruttore invece di 3. Inoltre non richiede che la mia classe sappia oggetti a cui non importa.
Il mio problema è comunque, non so come viene chiamato questo schema, quindi non posso fare ulteriori ricerche su di esso per scoprire se è ancora valido, è sostituito da un altro modello o se ha gravi problemi di prestazioni. Dalla mia ricerca, il modello più vicino che ho trovato è il modello di builder, ma sembra essere più un'estensione su questo.
Come punto bonus, sarebbe bello se tu potessi darmi una mano con come rendere certi parametri obbligatori dato che abbiamo circa 10 parametri dal database e altri 5 che sono solo bandiere che non abbiamo davvero bisogno di sapere.