Pensando all'architettura generale della logica dell'applicazione:
Stato attuale: il model
contiene tutti resource
s utilizzati al runtime.
In factory
si registra un builder
che viene utilizzato per creare una risorsa tramite la fabbrica. Ogni volta che la fabbrica crea una risorsa, aggiunge la risorsa al modello. Ciò significa che la fabbrica conosce il modello e mantiene un riferimento ad esso.
Le risorse possono essere versionate. Ogni versione di una risorsa è figlia di un elemento base nel modello e il modello è progettato come un albero a 2 livelli. Il 1 ° livello contiene la risorsa di base e il 2 ° livello tutte le versioni di esso. L'elemento del modello della risorsa di base punta sempre al primo figlio, ad es. l'ultima versione.
Ora alla domanda: cosa succede se si desidera creare una nuova versione di una risorsa in fase di runtime? Queste sono alcune opzioni per avviare il flusso di lavoro:
- Crea una risorsa tramite la fabbrica. Assicurarsi che la nuova risorsa sia stata aggiunta al modello. Questo è facile se la fabbrica conosce il modello. Ma questo è un buon design?
- Chiama un metodo dal modello che aggiunge una nuova versione di una risorsa esistente. Ma affinché funzioni, il modello deve conoscere la fabbrica, il che non è appropriato, penso. E forse la fabbrica conosce già il modello (vedi opzione 1). Dal mio punto di vista questo design puzza.
- Chiama un metodo dalla risorsa per creare una nuova versione di se stesso. Anche in questo caso non è appropriato, penso, perché come è garantito che il modello sia a conoscenza della nuova risorsa? La risorsa non dovrebbe sapere che il modello esiste anche.
Condividi le tue opinioni sul posto giusto per un metodo per creare una nuova versione. Un'opzione è più comunemente usata di un'altra? Ci sono altre opzioni più popolari?