Una fabbrica può essere sostituita da una chiave sul web.config? Come sarebbero i trade-off di ciascun approccio?

1

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

  1. La classe Enviroment è stata uccisa

  2. Abbiamo creato un altro webservice uguale alla produzione ma ospitato nello stesso ambiente che lo chiama

  3. 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.

    
posta MVCDS 08.06.2015 - 11:56
fonte

2 risposte

2

Se ho compreso correttamente il suggerimento del tuo collega, la soluzione proposta era di avere una chiave web.config che contenga un nome di tipo per la classe di implementazione. È possibile utilizzare questo nome per recuperare il tipo, creare un'istanza (o registrarsi nel contenitore DI) e utilizzarlo. Cioè:.

public interface IAuthenticationBlaBla
{
    ...
}

public class WebServiceAuthenticationBlaBla : IAuthenticationBlaBla {...}
public class AnotherAuthenticationBlaBla : IAuthenticationBlaBla {...}

web.config :

<add key="AuthenticationType" value="Namespace.WebServiceAuthenticationBlaBla" />

da qualche parte nel codice di inizializzazione (utilizzando DI, Autofac in questo caso):

ContainerBuilder builder = new ContainerBuilder();
...
builder.RegisterType(Type.GetType(ConfigurationManager.AppSettings["AuthenticationType"]))
    .As<IAuthenticationBlaBla>();
    
risposta data 08.06.2015 - 12:38
fonte
0

La tua domanda è molto difficile da leggere, ma penso di poter rispondere alla domanda generale. la mia comprensione del tuo problema è questa:

  • Hai un sito web che autentica gli utenti tramite un servizio web

  • Devi essere in grado di testare il sito web

Assicurati che la configurazione abbia queste cose:

  • Il codice client authservice implementa un'interfaccia.

  • Hai creato un servizio di autenticazione Mock che implementa la stessa interfaccia

  • Inietti il vero servizio di autenticazione o la simulazione tramite DI

  • Il DI è configurato tramite web.config

  • Il vero servizio di autenticazione dovrebbe leggere il suo URL del punto finale da web.config

questo ti consente di configurare il tuo test e gli ambienti live tramite web.config in vari modi

Live: URL endpoint live, servizio di autenticazione Real iniettato

Pre Live / Test: test endpoint url, vero servizio di autenticazione iniettato

Test / Dev Machine: servizio di autenticazione fittizio iniettato

    
risposta data 08.06.2015 - 16:44
fonte

Leggi altre domande sui tag