Il problema
Avevamo una classe Environment che sceglieva se utilizzare o meno un servizio web (era impostato da un riferimento Web) per i nostri metodi di autenticazione leggendo l'ambiente host e se fosse produzione o lo stesso come il webservice lo invocava altrimenti, eseguirà il codice prima della migrazione per il servizio web.
Progettazione errata, test scadente - quando lavoravamo all'autenticazione, manualmente obbligava il webservice a trovarsi nello stesso ambiente che stavamo testando per chiamare il webservice.
La soluzione
-
La classe Enviroment è stata uccisa
-
Abbiamo creato un altro webservice uguale alla produzione ma ospitato nello stesso ambiente che lo chiama
-
Un'interfaccia implementata da entrambi i servizi web è stata progettata
Ora usiamo una factory per restituire il giusto servizio web per coloro che vogliono autenticare, è possibile grazie all'interfaccia, quindi se dovessimo cambiare il webservice cambieremo solo la nuova interfaccia in modo conforme.
Diversi sapori di sbagliato
Una persona ha detto che sarebbe andata con una chiave nel web.config ["Non avrei usato le interfacce ma il web.config"] per restituire il giusto servizio web ma non riesco a vedere come risolve il nostro problema e io non sentirsi a proprio agio nel discuterne / chiederle a causa della politica e delle nostre capacità tecniche (newbie me).
Ecco alcuni pensieri sulla mia mente:
-
La sua chiave restituirebbe il tipo corretto per coloro che cercano l'autenticazione? In caso affermativo quale sarebbe l'"interfaccia" per l'autenticazione?
-
La sua chiave sarebbe un booleano? In questo caso dovrei scrivere un if-else per ogni metodo di autenticazione per chiamare il webservice giusto?
-
La sua chiave sarebbe una stringa? Immagino che potrebbe avere l'indirizzo dell'host in modo da utilizzare un solo webservice e una delle sue proprietà sarebbe cambiata al volo prima di chiamare i suoi metodi (non so se sia possibile, btw)
Relevant
I webservice sono stati creati sull'IDE, non modifichiamo il loro codice generato automaticamente, ma poiché sono anche parziali, potremmo implementare le nostre interfacce in file diversi.
Non ho trovato se è possibile modificare il punto di ingresso di un webreference che abbiamo generato automaticamente. L'IDE scrive i metodi che ha trovato su quell'indirizzo e funge da proxy per il servizio.
La fabbrica ci ha aiutato a evitare codice ripetitivo e non necessario, non vedo che accada con altre soluzioni, ma con la stringa su una chiave.