Disaccoppiamento del caricamento di dati, ordinamento e utilizzo

1

Ho i seguenti requisiti:

  1. Carica i dati da una varietà di fonti e riempi un elenco con esso
  2. Utilizza una serie di dati per eseguire alcuni calcoli

Alcune informazioni aggiuntive:

  1. L'algoritmo per il calcolo si aspetta che l'elenco dei dati sia ordinato da una chiave fornita con i dati.
  2. Voglio usare una coda invece di una lista all'interno dell'algoritmo per motivi di prestazioni (i dati caricati sono già memorizzati ordinati)
  3. Il batch di dati deve essere caricato in anticipo

Ho provato a suddividere i requisiti in classi diverse e ho trovato questo design (pseudocodice):

class Data {
    int key;
    // some more data fields
}

class SortedDataQueue{
    Data peek();
    Data dequeue();
    void enqueue(Data);
}

class ComputesData {
    Result performComputation();
    void setDataBatch(SortedDataQueue dataBatch);
}

class DataLoader {
    static SortedDataQueue loadFromJsonFile(File file);
    static SortedDataQueue loadFromDB(DataDAO dao);
}

È un buon design?

Cerco di migliorare l'architettura / design del software, ma è davvero difficile senza che qualcuno abbia esperienza nel rivedere il tuo lavoro. Ho provato a seguire i principi SOLID in questo.

    
posta Luca Fülbier 22.06.2016 - 22:04
fonte

1 risposta

1

Penso che tu abbia fatto un ottimo lavoro nel disaccoppiare le dipendenze, quello che potrei suggerire qui è non restituire già SortedDataQueue oggetto da DataLoader poiché la responsabilità è solo di recuperare i dati. In tal caso, puoi creare la classe:

    class DataCollector {
        SortedDataQueue collectIntoQueue();
        DataCollector init(Array<Data> dataArray);
    }

E la responsabilità di DataCollector è di raccogliere il tuo gruppo di dati in coda.

    
risposta data 23.06.2016 - 11:24
fonte

Leggi altre domande sui tag