Scrittura singola, lettura multipla di oggetti stateful

1

Scenario:

  • Un feed di input di dati (chiama questo Source )
  • Più oggetti (chiama questi Layer1 ) leggi questo Source e analizza il feed. Questa analisi è stateful.
  • Gli oggetti Layer1 hanno parametri di configurazione. Ad esempio, new FooLayer1(10, 20) eseguirà un'analisi diversa da new FooLayer1(20, 20) eseguirà un'analisi diversa da new FooLayer1(20, 30)
    • L'analisi Layer1 viene eseguita in modo asincrono.
  • Ancora altri oggetti (chiama questi Layer2 ) leggi solo l'output degli oggetti Layer1 ed elabora quei risultati. Questa analisi è anche stateful.
  • Gerarchia di creazione di oggetti Guice
  • Gli oggetti Layer1 necessari sono accessibili abbastanza spesso da non avere importanza se vengono creati pigramente, a condizione che rimangano in memoria dopo che sono stati creati la prima volta.
  • Le esigenze degli oggetti Layer2 sono hardcoded; non è un buon modo per sapere in anticipo quali oggetti di Layer1 saranno necessari.

Voglio poter riutilizzare il lavoro degli oggetti Layer1 . Ad esempio, diciamo che ho:

  • AlphaLayer2 oggetto che legge l'output di FooLayer1 e BarLayer1
  • BetaLayer2 legge l'output di BarLayer1 e BazLayer1
  • QuuxLayer1 è implementato, ma non voglio che il mio server calcoli il valore di QuuxLayer1 a meno che non ci sia un oggetto Layer2 che ne ha bisogno.

Attualmente, ho una factory a cui tutti gli oggetti Layer2 hanno accesso, che crea solo l'oggetto Layer1 appropriato, se necessario, e memorizza tutti gli oggetti Layer1 creati in una mappa. Tuttavia, poiché gli oggetti Layer1 hanno anche parametri di configurazione, devo assicurarmi di memorizzare gli oggetti Layer1 in una buona struttura dati. Ma la funzionalità Layer1 deve essere flessibile, e immagino che quando creerò più tipi di oggetti Layer1 , questo tipo di Map potrebbe diventare davvero complicato. Sto facendo questa domanda perché, mentre ora va bene, mentre la complessità cresce, mantenere la struttura dei dati in questo modo sembra diventare davvero difficile.

Il tentativo di creare una sorta di struttura di dati% co_de nidificata dovrebbe ottenere il tempo di accesso Map alla ricerca di questi oggetti O(1) , ma renderà la cache estremamente complicata. In alternativa, potrei tenerli in una struttura più piatta e scorrere l'elenco di tutti gli oggetti Layer1 e vedere se hanno i parametri corretti. Se nessuno trovato, crea il nuovo. Finché gli oggetti Layer1 mantengono il riferimento, questo dovrebbe accadere solo una volta. Un'altra opzione potrebbe essere creare un Layer2 in modo che debba solo scorrere gli oggetti Map<Class, Set<Layer1>> creati della classe corretta.

Qualcuno ha mai visto questo tipo di scenario? Quale delle opzioni che ho menzionato è preferita? O c'è qualcosa che non ho ancora menzionato? Inoltre, c'è un modo per usare Guice per creare Layer1 oggetti in un modo in cui posso riutilizzarli (cosa che devo fare, perché sono stateful)

    
posta durron597 09.05.2013 - 18:14
fonte

0 risposte

Leggi altre domande sui tag