Proprio ieri ho avuto una grande conferma di come utilizzare interfacce anzichè classi concrete come dipendenze, paghi e molto! Se poi il tutto è gestito con un framework IoC ancora meglio.
Perchè paga? Beh vi racconto una situazione, sicuramente non proprio comune, in cui mi sono trovato.
Ultimamente sto seguendo un progetto distribuito su vari stabilimenti dello stesso cliente e per questo motivo è basato su servizi. Oggi il progetto andava in demo presso uno stabilimento, in modo che gli utenti cominciassero a prendere dimistichezza con la UI e validassero i requisiti; purtroppo le macchine virtuali di test non erano ancora state preparate dai sistemisti del cliente e quindi non avevamo idea di dove installare l'applicazione. La demo sarebbe saltata e, anche se non era esclusivamente responsabilità nostra, la figura non sarebbe stata comunque buona.
Cosa fare a questo punto?
- Cambiare il mapping delle interfacce dei servizi, invece che sui client delle service reference, direttamente sulle implementazioni
- Aggiungere all'output del programma gli assembly dei servizi e relative dipendenze
- Aggiungere al file di configurazione del client le informazioni che sarebbero state sulla Service Base (sostanzialmente le stringhe di connessione e alcuni mapping per lo UnityContainer)
- Pubblicare l'applicazione con ClickOnce
- Vedere il tuo programma, progettato a servizi, funzionare anche completamente in locale, su tutti i pc degli utenti, senza aver modificato UNA SOLA riga di codice
Direi che i 30 minuti più o meno di investimento iniziale, dovuti alla scrittura dei file di configurazione dello UnityContainer (i tempi di scrivere il codice di una interfaccia mi rifiuto di calcolarli), sono stati ampiamente ripagati, visto che le tre soluzioni alternative erano:
- Rimandare la Demo di almeno una settimana
- Rivisitare il codice a mano e poi pregare di aver trovato tutto
- Installare l'applicazione completa (client e servizi) su una macchina virtuale creata ad hoc da distribuire a mano a tutti gli utenti, con relativo player
ed erano tutte e tre peggiori se non irrealizzabili nei tempi accordati.
Matteo