我将有多个WCF组件方法返回一个公共对象。在某些情况下,字段A,B,C,D将需要是非空的,但在其他情况下,字段B,F,G,Q可能需要是非空的。
我想向任何可能创建这些方法的人表明任何特定方法都需要哪些字段。我也想强制执行这些要求。
我可能无法更改共同对象 - 即它由不同的团队定义。
是否有可以轻松实现这一目标的模式或策略?
谢谢!
答案 0 :(得分:2)
你需要一个知道如何处理两个(所有)情况的适配器对象,或者(可能)更好的多个适配器,每个适配器都知道如何处理它们自己的情况。
如果您无法控制对象,那么您无法在其内部强制执行任何操作,您可以做的就是在您自己的代码中适应它。所以其他团队仍将返回共同对象。您所做的是在您的代码中,创建验证所需字段等的适配器对象。
例如,
CommonObjectFromWCFGuys cofwg = wcf.SomeMethod( someParam );
AdapterForABCD abcd = new AdapterForABCD( cofwg );
abcd.ValidateRequiredFields( );
SomeInternalBusinessMethod( abcd );
您的'SomeInternalBusinessMethod'可以需要特定字段,但您无法强制其他团队返回这些字段,您可以在使用它们之前在代码中检查它们。
答案 1 :(得分:1)
从yetapb所说的,你可以有两个或更多的适配器对象,它们都实现了相同的接口。这样,当您调用SomeMethod返回需要字段(A,B,C,D)的对象时,将其传递给一个适配器对象。当您调用需要字段(B,F,G,Q)的SomeOtherMethod时,您将实例化另一个适配器类。
如果这两个实现了一个共同的interce,你可以在接口上添加类似IsValid方法的东西,并且在检查IsValid之后只在代码中本地引用接口。然后,每个适配器类将为必需的字段实现它自己的逻辑。
在本地,您永远不会直接引用代码中的任何适配器,而是直接引用您的界面。
除此之外,你是服务的消费者 - 你不能保证返回对象在逻辑上做你认为的那样(在某些层面上,你应该围绕这个事实进行防御性编程),超出了运营合同。这里的基本思想是这种方法为对象添加了一层薄层验证。