Sembra che ci siano due parti alla tua domanda:
- Ottenere i dati da più fonti
- Trasformazione dei dati nel formato previsto
Il compito di ottenere i dati dai sorgenti sarebbe gestito dal repository. Parte del recupero dei dati la sta trasformando nel formato previsto. La domanda a cui devi rispondere è: "Qual è la classe prevista?".
Se questi dati vengono utilizzati solo come questo tipo singolare finale, ciascun repository restituirà il singolo tipo. Una chiamata a MyRepository chiamerà internamente ciascuno dei repository di origine.
public class MyRepository {
ISourceRepository[] Sources;
private getFromSources();
public getData(); //uses getFromSources
}
A volte i dati sono utili sia nella forma originale che nel tipo finale, se questo è il caso, i repository devono restituire tipi separati, che poi possono essere trasformati nel nuovo tipo con qualcosa come il pattern visitor:
public class MyDataFormatter {
public MyData format(SourceOne data);
public MyData format(SourceTwo data);
public MyData format(SourceThree data);
}
public class MyDataRepository {
public IRepository Repos;
public function getData() {
get data from each repo in it's original format
call MyDataFormatter.format(data)
}
}
adattato da questo link