Come posso evitare di duplicare le informazioni in questo scenario?

2

Ho una classe Data che può essere collocata all'interno di una classe DataCollection che può essere collocata all'interno di una classe DataCollectionCollection. Un po 'come un uovo può essere inserito in una scatola che può essere inserito in una cassa.

La classe Data può essere "standardizzata" attraverso un processo speciale. La standardizzazione creerà una nuova classe StandardData che contiene alcune informazioni sul processo di standardizzazione che ha attraversato.

StandardDataClass può essere inserito solo all'interno di NormalDataCollection. La classe StandardDataCollection deve accettare solo oggetti StandardData che hanno attraversato un processo di standardizzazione simile.

Una classe StandardDataCollection può essere inserita solo in una classe StandardizatedDataCollectioCollection che, di nuovo, deve solo accettare le classi NormalizedDataCollection che hanno attraversato un processo di standardizzazione simile.

Ci sono alcuni modi in cui ho pensato a come farlo:

  • Dispone di un archivio StandardData, Collection e CollectionCollection rispetto alle informazioni di standardizzazione. Vorrei evitare questo scenario, se possibile, in quanto potrebbe esserci un oggetto 1000 StandardData che verrà caricato nella piccola memoria dei dispositivi mobili.

Questa è l'unica idea che posso spiegare sulla carta per ora. Un'ultima cosa: StandardData non dovrebbe essere permesso di essere standardizzato di nuovo in quanto ciò renderà meno accurato.

    
posta Supreme Grand Ruler 30.04.2016 - 09:55
fonte

3 risposte

2

A causa del design attuale, scommetto che devi istanziare tutti questi oggetti in modo da poter avere i riferimenti incrociati, ad esempio da un oggetto Data al suo oggetto StandardizedData ; idem per collezioni e collezioni-collezione.

Elimina più della metà delle classi e crea una gerarchia semplice.

Perché avere 2 classi per i dati? Mi sembra che i dati non standardizzati siano solo un caso speciale di standardizzazione. E tu dici che StandardizedData contiene alcune informazioni sul processo di standardizzazione che ha attraversato. Sembra solo "metadati". Quindi, perché non avere Data contiene le proprie informazioni?

public class Data {
    public StandardizedInfo MyStandardizingInfo { get; protected set; }
}

Suppongo che un riferimento StandardInfo di null significhi che i dati non sono ancora standardizzati. Questo non sarebbe possibile se Data non contenesse il riferimento.

Non c'è StandardizedDataCollection , solo:

public class DataCollection {
  protected List<Data> myData {get; set;}
}

La parte di dati standardizzata della raccolta.

E non vedo alcun motivo per un "CollectionCollection". Questo potrebbe andare avanti all'infinito. Quindi, basta:

public class DataCollection {
  public DataCollection innerCollection {get; protected set;}
}

Non è necessario un tipo speciale - xxxCollectionCollection - per applicare una gerarchia ad 1 profondità. Costruisci in questo modo.

Ora tutto può essere istanziato pigramente. Potresti iniziare con DataCollection vuoto e aggiungerlo quando necessario. Allo stesso modo puoi avere un oggetto Data e creare un'istanza del suo oggetto StandardizedData solo quando necessario.

Se davvero devi esprimere una "raccolta dati standardizzata" eppure salva memoria, scrivi un enumeratore sulla classe DataCollection che produce gli oggetti StandardizedData .

    
risposta data 29.08.2016 - 04:44
fonte
1

Data

Have StandardizedData, Collection, and CollectionCollection store than the standardization info. I'd like to avoid this scenario if possible as there could be a 1000 StandardizedData object which will be loaded into the small memory of mobile devices.

potresti esaminare il schema dei pesi volanti . Se vengono replicate le informazioni di standardizzazione, è possibile memorizzare un riferimento a un'istanza di questo nell'intera raccolta (o raccolta di raccolte). Se le tue informazioni di standardizzazione differiscono leggermente tra le raccolte, puoi partizionarlo nel caso in cui non dovessi replicare le parti che non ti servono.

Se questo non si applica, hai considerato di utilizzare le tue classi di "raccolta" per caricare pigramente (e buttare via) i dati come richiesto? In modo che quando mi dai un oggetto 'DataCollection', non conterrà una sequenza di dati finché non ne avrò realmente bisogno, e lo caricherò solo (presumibilmente eliminando altri dati che non mi servono). Anche questo ridurrebbe l'ingombro della memoria, a scapito di impiegare più tempo per l'esecuzione e richiedendo una connessione a un'origine dati remota.

    
risposta data 30.04.2016 - 14:37
fonte
-1

Sembra che tu abbia una sola classe di dati con un elenco di oggetti dati contenuti come una proprietà come suggerisce radarbob. La standardizzazione potrebbe essere un processo eseguito in qualsiasi momento in cui le campiture di un oggetto di dati, assumendo che lo stato standardizzato sia l'unico stato alla fine interessante. Non è chiaro se i "dati di standardizzazione" siano un insieme applicabile a tutti o specifici di un oggetto. Nel primo caso può essere un membro statico, nel secondo un membro non statico della classe dati.

    
risposta data 29.08.2016 - 07:47
fonte

Leggi altre domande sui tag