…apparentemente insormontabile.
In Gaia abbiamo una corposa applicazione, che definirei legacy in quanto esistente dal 2000 circa, che usiamo come engine su cui appoggiare una qantità non indifferente di building block per produrre applicazioni finite per alcuni dei nostri clienti.
L’applicazione soffre di alcuni problemi architetturali che si trascina da che mondo è mondo, inevitabile direi, e uno di questi (banale per certi versi) è emerso in questi giorni.
L’applicazione invia mail usando “Smtp Client” di .Net e lo fa in svariati punti, molto svariati e molto punti :-), in settimana la pianificazione dell’installazione presso un grosso cliente ha posto un problema: la macchina di produzione è blindatissima (mica come questi) talmente blindata che non ha accesso all’esterno in nessun modo se non verso un noto set di servizi (Web Services) tra cui ce ne è uno per l’invio di posta elettronica…
Il fatto che l’applicazione usi direttamente “Smtp Client” in svariati punti senza wrapparlo in nessun modo rende sostanzialmente impossibile una modifica “on the fly” della logica, modifica che con un accurato uso di IoC e DI sarebbe stata banale (ci stiamo lavorando alacremente), abbiamo quindi deciso di approcciare il problema dal lato opposto.
Smtp Server Proxy
Stamattina mi sono armato di buon ora e ho scritto, in realtà ho cercato bene su internet e ho fatto un bel po’ di composition di un sacco di roba trovata qua e la adattandola alle nostre necessità, un server smtp in C# che fa semplicemente da proxy verso un message disatcher iniettabile a runtime via MEF.
L’applicazione quindi non dovrà essere minimamente modificata ma semplicemente configurata per usare come smtp server il nostro proxy il quale al ricevimento di ogni messaggio non farà altro che delegare al dispatcher di turno l’invio del messaggio:
image
MEF è tanta roba, proprio tanta, ci ho messo tre minuti tre per mettere in piedi la gestione dei plugin.
.m