2011-01-25 13 views
5

Necesito escribir un contenedor para una colección de métodos web que están expuestos en un servicio web particular. Tiene sentido pegar este nuevo método de envoltura en el mismo servicio, ya que afecta al mismo tipo de objeto.Llamando a métodos web desde el mismo servicio web

La mayoría de estos métodos web son solo métodos delgados que llaman a métodos estáticos en otros archivos, lo que está bien, pero también tienen cierta lógica de seguridad antes de estas llamadas a métodos estáticos. En lugar de volver a crear la lógica de seguridad antes de cada llamada al método que quiero envolver, ¿es posible llamar a estos otros métodos web desde el mismo servicio localmente o es una mala práctica?

He aquí un ejemplo:

[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(); 
} 

Respuesta

4

En general tendrá que separar la interfaz pública de su servicio web de la aplicación real de forma más limpia posible, en su ejemplo que haya hecho esto encapsulando en AnObject lo que permite la prueba unitaria de los métodos encapsulados por separado (lo cual es un gran problema, de lo contrario, especialmente con los métodos web).

Dicho esto desde una perspectiva de las pruebas que sugeriría en lugar de hacer esto:

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

Esto permitirá escribir pruebas de que la prueba WrapperMethod directamente (encapsulados en AnObject), en lugar de tratar de recrear las pruebas de AnObject.StaticMethod1() + AnObject.StaticMethod2() en las pruebas de su unidad, esto se complica rápidamente porque ahora tiene la misma lógica en dos lugares diferentes.

+0

Grandes puntos en los aspectos de prueba. ¡Gracias! –

0

No, en absoluto. Es una muy buena idea encapsular esa lógica. Podría tener un AnObject.WrapperStaticMethod().

Cuestiones relacionadas