Servizio Windows WCF con pattern di plugin, accesso a diversi servizi Web e un database

1

Sto riprogettando un servizio Windows WCF (InstanceContextMode.Single) che è stato creato da un fornitore esterno, mentre era super urgente e quando non c'era davvero molto tempo per progettare il software. Ciò significa che il codice era una sorta di lavoro di patch-up. Ora voglio riprogettarlo correttamente.

Inizialmente, il servizio ha appena inoltrato richieste da un client leggero a servizi Web esterni, ospitati da altre società fornitrici. Inoltre, il servizio ha registrato tutte le richieste (per problemi legali e risoluzione dei problemi). Il servizio è stato implementato con un pattern di plugin. Ogni plugin (una singola DLL) si registra al servizio. Una richiesta dal client verrà inoltrata al plug-in di destinazione in base a un token. Nel caso in cui uno dei plug-in non riesca a raggiungere il proprio servizio di fornitore esterno, accede a un database locale che memorizza una copia dei dati (ma che viene aggiornata solo una volta al giorno, quindi i dati non sono aggiornati al 100%) . Il webservice è per lo più stabile, ma dobbiamo riavviarlo di tanto in tanto a causa di perdite di memoria causate dal modo in cui è stato riparato insieme.

Tuttavia, i requisiti sono cambiati molto e ora avremo altri 6 plugin che non inoltrano a nessun servizio web esterno. Invece, accedono direttamente al database per ottenere i dati. Sfortunatamente, il modo in cui il servizio è stato progettato fino ad ora, ha richiesto a tutti i plug-in di avere la propria implementazione della connessione al database e delle query. Ciò significa che se creo 6 nuovi plugin, devo scrivere il codice per tutti loro per la connessione al database e le query, ecc. Sarà un sacco di codice ridondante. Ecco perché ho pensato, potevo abbandonare tutte queste cose SQLConnection e SQLCommand e utilizzare invece EntityFramework. Poiché il database esiste già, posso utilizzare l'approccio Database First e generare il codice.

Il mio problema (mi dispiace per la lunga introduzione) è ora, che l'intero concetto del software è stato progettato con il modello di plugin. Ciò significa che se ho 3 plug-in originali che accedono al database e altri 6 nuovi plug-in che accedono al database, devo gestire 9 plugin in totale. Quindi o creo 9 file edmx, ma devono essere tutti aggiornati ogni volta che il database cambia. In alternativa, aggiungo un progetto di database e tutti i 9 plugin fanno riferimento a questo progetto e consentono di gestire il database. Ma poi l'intero concetto del modello di plugin è un po 'perso, non è vero?

    
posta Davatar 30.11.2016 - 08:18
fonte

0 risposte