2011-01-25 17 views
5

Devo scrivere un wrapper per una raccolta di metodi Web esposti in un particolare servizio Web. Ha senso attaccare questo nuovo metodo wrapper nello stesso servizio poiché sta interessando lo stesso tipo di oggetto.Chiamata di metodi Web dallo stesso servizio Web

La maggior parte di questi metodi Web sono solo metodi sottili che richiamano metodi statici in altri file, il che va bene, ma hanno anche una certa logica di sicurezza prima di queste chiamate al metodo statico. Anziché ricreare la logica di sicurezza prima di ogni chiamata al metodo che voglio avvolgere, è possibile chiamare questi altri metodi Web all'interno dello stesso servizio in locale o è una cattiva pratica?

Ecco un esempio:

[WebMethod] 
public int SmallMethod1(int a) 
{ 
    //SecurityLogic 
    return AnObject.StaticMethod1(); 
} 

[WebMethod] 
public int SmallMethod2(int b) 
{ 
    //SecurityLogic 
    return AnObject.StaticMethod2(); 
} 

[WebMethod] 
public int WrapperMethod(int c) 
{ 
    return AnObject.StaticMethod1() + AnObject.StaticMethod2(); 
} 

risposta

4

In generale si vuole separare l'interfaccia pubblica del vostro servizio web dalla effettiva attuazione in modo pulito come possibile, nel tuo esempio che avete fatto questo da loro incapsulamento in AnObject che consente all'unità di testare separatamente i metodi incapsulati (il che è un grosso problema, soprattutto con i metodi web).

Detto questo dal punto di vista di test vorrei suggerire invece di fare questo:

[WebMethod] 
public int WrapperMethod(int c) 
{ 
    return AnObject.WrapperMethod(c) 
} 

Questo permetterebbe di scrivere test che prova WrapperMethod direttamente (incapsulati in AnObject), piuttosto che cercare di ricreare il test per AnObject.StaticMethod1() + AnObject.StaticMethod2() nei test della tua unità - questo diventa molto veloce perché ora hai la stessa logica in due punti diversi.

+0

Grandi punti sugli aspetti del test. Grazie! –

0

Niente affatto. È un'ottima idea per incapsulare quella logica. Potresti avere un AnObject.WrapperStaticMethod().

Problemi correlati