Program to an Interface, sempre!

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

 

Print | posted @ venerdì 23 gennaio 2009 12:00

Comments on this entry:

Gravatar # re: Program to an Interface, sempre!
by Sandro at 23/01/2009 16:30

mah...
Gravatar # re: Program to an Interface, sempre!
by Foffo at 23/01/2009 17:21

Che dire! Un commento denso di significato! :) :)
Gravatar # re: Program to an Interface, sempre!
by Marco De Sanctis at 24/01/2009 03:16

Ciao Foffo, non basta solo disaccoppiare, bisogna vedere anche come lo fai, e se veramente è andata come dici, senza che mai provassi a fare andare la tua app in process, beh... lasciatelo dire, sei stato molto fortunato.

Basta ad es. che in un tuo metodo
void MyMethod(Argument argument)
modifichi qualcosa di quell'argument che purtroppo le cose non sono più le stesse, anche con IoC, interfacce, ecc.ecc.

In bocca al lupo, cmq!

Ciao,
m.
Gravatar # re: Program to an Interface, sempre!
by Foffo at 26/01/2009 17:04

Ciao Crad

Si per ora posso dire di essere fortunato e la mia fortuna è probabilmente legata alle dimensioni del progetto. Essendo ancora un progetto relativamente piccolo, mi è ruiscito facile disaccoppiare tutto bene.

Spero di riuscire a mantenermi su questa strada!

Matteo
Comments have been closed on this topic.