Come pulire la radice di composizione da qualcosa di diverso dalla costruzione di oggetti?

1

Sto facendo DI (iniezione manuale) nella mia applicazione. La mia (pseudo-) composizione root ha un aspetto simile al seguente:

var connectionSettings = new Settings(SqlParameters)
var dataLoader = new SqlDataLoader(connectionSettings)

var data = dataLoader.LoadData() //yuck

var someOtherDependency = new SomeClass(...)
... //a lot of other objects construction

var dataProcessor = new DataProcessor(data, someOtherDependency, ...)

dataProcessor.Process()

Non sono abbastanza contento del codice qui sopra. Era destinato a contenere solo la costruzione di un oggetto grafico ( new(...) ) ad eccezione della chiamata al metodo finale Process() , ma sfortunatamente qualche altra logica (in particolare il caricamento dei dati e le condizioni condizionali) si infiltrava. Qual è il modello di progettazione corretto in questi casi ? Ho pensato di cambiare codice in DataProcessor da:

public class DataProcessor
{
    public DataProcessor(Data data, otherDependency, ...)
    {
        this.data = data;
        this.otherDependecy = otherDependency;
        ...
    }

    public void Process()
    {
        ... //logic based on data
    }
}

a

public class DataProcessor
{
    public DataProcessor(IDataLoader dataLoader, otherDependency, ...)
    {
        this.DataLoader = dataLoader
        this.otherDependecy = otherDependency;
        ...
    }

    public void Process()
    {
        data = DataLoader.LoadData();
        ... //logic based on data
    }
}

tuttavia questa non è la mia soluzione preferita, poiché cambia perfettamente classe e implica che i dati devono sempre essere caricati, il che non è sempre il caso. Ad esempio, nei test unitari non carico dati ma creo solo un oggetto mock.

    
posta jqer 05.11.2014 - 18:23
fonte

0 risposte

Leggi altre domande sui tag