Come implementare un modello di simulazione per un repository?

4

Diciamo che ho un repository di funzioni. Queste funzioni funzionano con oggetti business all'interno di un database, CMS o altre API di terze parti. Ad esempio, il mio repository interagisce con file e documenti virtuali in un sistema di gestione dei documenti. Voglio essere in grado di implementare una modalità di simulazione nel mio repository in modo tale che quando eseguo i comandi, voglio vedere il risultato senza che in realtà faccia nulla. Questo per ridurre il rischio che qualcuno esegua una serie di comandi nel mio repository e faccia qualcosa di pericoloso. Voglio che prima vedano l'output e confermino prima dell'esecuzione.

La mia domanda è, quali sono alcuni buoni schemi per implementare una modalità di simulazione per un repository? Posso pensare a pochi in cima al mio cappello:

Avvolgi tutti gli oggetti di business in un'altra classe, in modo tale che quando chiamerai File.Delete, la tua chiamata in realtà la classe wrapper e la verifica in modalità simulazione sia abilitata. Il problema è che molte librerie e SDK di terze parti non ti permettono di creare una sottoclasse dei loro oggetti di business. Come passeresti nella modalità di simulazione (ogni volta che un oggetto viene istanziato?).

Un'altra opzione sarebbe quella di implementare un repository simulato. Tuttavia, non voglio duplicare alcun codice esistente nel repository. Significato, non voglio simulare tutto al punto che non fa nulla, voglio solo simulare creare, aggiornare ed eliminare comandi, non la logica di business. Forse ho bisogno di implementare un altro livello nella mia applicazione?

I suggerimenti sarebbero apprezzati. Mi chiedo anche se questa filosofia di progettazione sia popolare nella maggior parte degli ambienti aziendali e in che modo viene eseguita. Ritengo che consentire agli amministratori di eseguire una simulazione e misurare i risultati prima di eseguirli effettivamente sia di vitale importanza in uno scenario mission-critical in cui si sta lavorando con i dati di un altro cliente.

    
posta szahn 09.08.2012 - 21:06
fonte

1 risposta

1

Un metodo per raggiungere i risultati che stai cercando (anche se potrebbe essere considerato un po 'eccessivo) è usando un modello di adattatore . È possibile alimentare qualsiasi classe di utilizzo di un'implementazione dell'adattatore in base allo stato al momento dell'esecuzione.

Ad esempio, potresti avere un'implementazione dell'adattatore che non fa altro che stampare ciò che sta per fare. Un'altra implementazione potrebbe estendere tale adattatore e aggiungere la funzionalità per eseguire effettivamente le attività.

    
risposta data 10.08.2012 - 03:25
fonte

Leggi altre domande sui tag