Pattern per più origini dati

2

Ho già letto questa domanda su CodeReview . Speravo in un consiglio generale.

Sto scrivendo un servizio che andrà a numerose fonti di dati. Ogni sorgente richiede di ottenere grandi quantità di dati e di modificarli in un unico formato. Qual è lo schema migliore per un'attività come questa?

Attualmente ho una classe "base" che espone un metodo GetData statico, che le altre classi ereditano e implementano. Questo non sembra l'approccio più pulito, quindi mi stavo chiedendo quali altri approcci potrebbero soddisfare le mie esigenze?

    
posta Faraday 03.03.2014 - 04:50
fonte

2 risposte

2

Sembra che tu abbia bisogno di un pattern Repository , magari supportato da un Strategy che sceglierebbe tra diverse implementazioni.

Come si fa in realtà, si espone un'interfaccia generica con le operazioni CRUD di base e si esegue un'implementazione per ciascuna origine dati mentre si lascia che il modello strategico decida sull'implementazione. Se si utilizza l'integrazione delle dipendenze, ciò potrebbe risultare un po 'complicato se si decida quale fonte di dati si sta utilizzando non è facilmente deducibile dall'inizio.

    
risposta data 03.03.2014 - 14:20
fonte
0

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

    
risposta data 03.03.2014 - 22:42
fonte

Leggi altre domande sui tag