Separazione delle preoccupazioni nella creazione dell'oggetto con fabbrica e modello

1

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:

  1. 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?
  2. 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.
  3. 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?

    
posta user2366975 01.03.2018 - 20:04
fonte

1 risposta

1

Dipende da chi è logicamente responsabile delle risorse.

Modello come deposito (opzione 1)

Se il modello viene semplicemente incaricato di conservare risorse che potrebbero provenire da qualche altra parte (specialmente se hai più fonti che possono creare risorse), sceglierei l'opzione 1.

Se la fabbrica dovrebbe anche essere responsabile della registrazione delle risorse con il modello dipende dalla tua applicazione. Se tutte le risorse devono essere registrate con lo stesso modello (o il modello da cui proviene la loro versione base), allora probabilmente ha senso.

Modello come gestore risorse (opzione 2)

Se le risorse sono di proprietà del modello, può avere più senso iniettare la fabbrica nel modello e fare in modo che il modello fornisca un metodo CreateXyzResource() . La creazione della risorsa può quindi essere delegata alla fabbrica (che diventa un dettaglio) e il modello può registrare la risorsa appena creata.

In questo caso, potrebbe non essere necessario che la fabbrica dipenda dal modello perché il modello può fornire i dati rilevanti alla fabbrica.

    
risposta data 02.03.2018 - 00:26
fonte