我需要为在特定Web服务中公开的Web方法集合编写包装器。将这个新的包装器方法粘贴在同一个服务中是有意义的,因为它会影响相同类型的对象。
这些Web方法中的大多数只是在其他文件中调用静态方法的瘦方法,这很好,但是在这些静态方法调用之前它们也有一些安全逻辑。而不是在我想要包装的每个方法调用之前重新创建安全逻辑,是否可以从本地内部的同一服务中调用这些其他Web方法,或者这是不好的做法?
以下是一个例子:
[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();
}
答案 0 :(得分:4)
一般情况下,您需要尽可能干净地将Web服务的公共接口与实际实现分开,在您的示例中,您通过将它们封装在AnObject
中来完成此操作,这允许单独测试封装的方法(这是一个很大的问题,特别是对于网络方法而言)。
从测试的角度说,我建议这样做:
[WebMethod]
public int WrapperMethod(int c)
{
return AnObject.WrapperMethod(c)
}
这将允许您编写直接测试WrapperMethod
的测试(封装在AnObject
中),而不是尝试在单元测试中重新创建AnObject.StaticMethod1() + AnObject.StaticMethod2()
的测试 - 这会很快变得混乱,因为现在你在两个不同的地方有相同的逻辑。
答案 1 :(得分:0)
完全没有。封装该逻辑是一个非常好的主意。你可以拥有AnObject.WrapperStaticMethod()
。