Così ho fatto molte letture / ricerche su codice / design pulito, OOAD, refactoring, TDD, ecc. Sto solo cercando di migliorare i miei progetti per essere più facili da estendere e mantenere. Una cosa che emerge molto spesso è evitare di fare "lavoro reale" in un costruttore.
Non invierò qui le risorse, ma nomi come Misko Hevery, Bob Martin, ecc. sembrano raccomandare di evitare di fare molto lavoro nel costruttore (una rapida ricerca su Google restituisce una serie di articoli). La mia domanda non è tanto il modo in cui farlo accadere, ma PERCHÉ? Perché dovrei scegliere di utilizzare un metodo di produzione statico? Perché questo migliora la testabilità (come si dice)?
Un esempio di ciò di cui sto parlando è qui:
public class ConstructorObject
{
public int Value { get; }
public ConstructorObject()
{
// do work (e.g. calculate divisors, GCD for array, etc.) to calculate value
Value = value;
}
}
public class FactoryMethodObject
{
public int Value { get; }
public static Create()
{
// do work (e.g. calculate divisors, GCD for array, etc.) to calculate value
return new FactoryMethodObject(value);
}
private FactoryMethodObject(int value)
{
Value = value;
}
}
Per me, questi sembrano offrire gli stessi vantaggi e svantaggi. Quindi sto cercando di capire perché ... Grazie!