La riflessione dovrebbe far parte del design?

4

Attualmente sto progettando un programma piuttosto ampio che coinvolgerà la simulazione di modelli matematici / fisici e la raccolta di dati (non ho ancora implementato alcun codice). Uno dei problemi principali che sto affrontando è come passare facilmente i dati senza dover disporre di più copie di dati (che potrebbero essere obsoleti e ridondanti).

Inizialmente pensavo di fare in modo che gli oggetti del modello implementassero una funzione che restituisce una struttura di dati contenente copie dei loro dati, quindi raccoglie tutte le strutture di dati insieme e le trasmette. Ciò comporterebbe tuttavia un sacco di copie e i dati non verrebbero più mappati sull'oggetto reale. (L'idea della struttura dei dati che avevo implicherebbe l'uso di un trie in modo che i dati fossero carini e gerarchici e le ricerche possono essere fatte facilmente con una stringa)

Quindi ora pensavo che invece di progettare il programma per usare una struttura dati per passare i dati, il programma avrebbe semplicemente passato il modello, e quindi i dati possono essere estratti con la riflessione. Ciò eviterà praticamente qualsiasi ridondanza e i dati passati saranno sempre aggiornati.

Il problema è che anch'io ho bisogno che questo programma sia veloce (ha dei limiti soft in tempo reale), e non sono sicuro riguardo all'impatto delle prestazioni della riflessione. E la riflessione sembra piuttosto brutta. Ma allo stesso tempo, la gente dice che non è mai una buona idea ottimizzare in anticipo, quindi sono sulla barriera qui.

Quindi dovrei progettare il programma per usare la riflessione e, in caso affermativo, con quale libertà? O dovrei cercare di evitare il riflesso il più possibile durante la progettazione?

    
posta 9a3eedi 27.03.2014 - 02:20
fonte

1 risposta

11

Senza un esempio, questa domanda è un po 'troppo ampia per i miei gusti, quindi la risposta migliore che posso darti è molto generica. IMHO quello di cui hai bisogno è un approccio più funzionale:

  • modella i tuoi dati usando oggetti immutabili . Per oggetti immutabili, non è necessario creare alcuna copia, possono essere passati per riferimento senza il rischio di creare effetti collaterali.

  • utilizzando solo strutture di dati immutabili ti costringe a organizzare il tuo programma in modo tale che ogni funzione che potrebbe fornire risultati potenzialmente obsoleti sia chiamata "al volo" nel momento in cui i dati sono necessari , non prima.

  • invece di risolvere imperativamente i problemi "calcolando alcuni dati xey, memorizzali da qualche parte, riutilizzali in seguito per calcolare a, b e c", impara come modellare i problemi in modo funzionale (scrivi funzioni per il calcolo di a, b e c in base alle funzioni per il calcolo di x e y).

  • modella il tuo flusso di dati, magari graficamente: assicurati di sapere esattamente quali componenti nel tuo sistema ottengono i dati da cui provengono altri componenti e dove vengono introdotte le "modifiche asincrone". Raccomando Flow Design per questo.

  • la riflessione è probabilmente la scelta sbagliata per il tuo problema (non per motivi di prestazioni, ma per introdurre effettivamente più problemi di quanti ne risolva)

EDIT: un ottimo esempio di un modello fisico che sembra simile al tuo problema è simulatore di circuiti digitali in" Struttura e interpretazione dei programmi per computer ". E questo esempio è basato su dati mutabili (sebbene usi anche elementi funzionali). Forse questo approccio potrebbe essere un progetto per il tuo.

    
risposta data 27.03.2014 - 08:18
fonte

Leggi altre domande sui tag