Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当从不同方法返回时,如何要求同一对象上的不同字段?_C#_Design Patterns_Oop - Fatal编程技术网

C# 当从不同方法返回时,如何要求同一对象上的不同字段?

C# 当从不同方法返回时,如何要求同一对象上的不同字段?,c#,design-patterns,oop,C#,Design Patterns,Oop,我将有多个WCF组件方法返回一个公共对象。在某些情况下,字段A、B、C、D将被要求为非空,但在其他情况下,字段B、F、G、Q可能被要求为非空 我想向创建这些方法的人指出,任何特定方法都需要哪些字段。我还想强制执行这些要求 我可能无法更改公共对象,即它由不同的团队定义 有没有一种模式或策略可以让这变得容易 谢谢 您需要一个适配器对象,它知道如何处理两种(所有)情况,或者(可能)更好,需要多个适配器,每个适配器都知道如何处理自己的情况 如果您不能控制对象,那么您就不能在其内部强制执行任何内容,您所能

我将有多个WCF组件方法返回一个公共对象。在某些情况下,字段A、B、C、D将被要求为非空,但在其他情况下,字段B、F、G、Q可能被要求为非空

我想向创建这些方法的人指出,任何特定方法都需要哪些字段。我还想强制执行这些要求

我可能无法更改公共对象,即它由不同的团队定义

有没有一种模式或策略可以让这变得容易


谢谢

您需要一个适配器对象,它知道如何处理两种(所有)情况,或者(可能)更好,需要多个适配器,每个适配器都知道如何处理自己的情况

如果您不能控制对象,那么您就不能在其内部强制执行任何内容,您所能做的就是在您自己的代码中适应它。因此,另一个团队仍将返回公共对象。您要做的是在代码中创建适配器对象,以验证所需字段等

比如说,

CommonObjectFromWCFGuys cofwg = wcf.SomeMethod( someParam );
AdapterForABCD abcd = new AdapterForABCD( cofwg );
abcd.ValidateRequiredFields( );
SomeInternalBusinessMethod( abcd );

然后,您的“SomeInternalBusinessMethod”可以要求特定的字段,但您不能强制其他团队返回这些字段,您可以在使用它们之前在代码中检查它们。

您需要一个适配器对象,它知道如何处理这两种(所有)情况,或者(可能)更好,多个适配器,每个适配器都知道如何处理自己的情况

如果您不能控制对象,那么您就不能在其内部强制执行任何内容,您所能做的就是在您自己的代码中适应它。因此,另一个团队仍将返回公共对象。您要做的是在代码中创建适配器对象,以验证所需字段等

比如说,

CommonObjectFromWCFGuys cofwg = wcf.SomeMethod( someParam );
AdapterForABCD abcd = new AdapterForABCD( cofwg );
abcd.ValidateRequiredFields( );
SomeInternalBusinessMethod( abcd );

然后,您的“SomeInternalBusinessMethod”可以要求特定的字段,但您不能真正强制其他团队返回这些字段,您可以在使用它们之前在代码中检查它们。

根据yetapb的说法,您可以有两个或多个适配器对象,它们都实现相同的接口。这样,当您调用SomeMethod返回一个需要字段(A、B、C、D)的对象时,您将其传递给一个适配器对象。当您调用需要字段(B、F、G、Q)的其他方法时,您将实例化另一个适配器类

如果这两种方法都实现了一个公共interce,那么您可以在接口上放置类似IsValid的方法,并且只有在检查IsValid之后才在代码中本地引用接口。然后,每个适配器类将为所需字段实现自己的逻辑

在本地,您将永远不会直接引用代码中的适配器类别,而是引用接口


除此之外,您是服务的消费者-您不能保证返回对象在逻辑上做您认为它是的事情(在某些级别上,您应该围绕这一事实进行防御性编程),超出了操作合同。这里的基本思想是,这种方法为对象添加了一层薄薄的验证。

根据yetapb的说法,您可以有两个或多个适配器对象,它们都实现了相同的接口。这样,当您调用SomeMethod返回一个需要字段(A、B、C、D)的对象时,您将其传递给一个适配器对象。当您调用需要字段(B、F、G、Q)的其他方法时,您将实例化另一个适配器类

如果这两种方法都实现了一个公共interce,那么您可以在接口上放置类似IsValid的方法,并且只有在检查IsValid之后才在代码中本地引用接口。然后,每个适配器类将为所需字段实现自己的逻辑

在本地,您将永远不会直接引用代码中的适配器类别,而是引用接口


除此之外,您是服务的消费者-您不能保证返回对象在逻辑上做您认为它是的事情(在某些级别上,您应该围绕这一事实进行防御性编程),超出了操作合同。这里的基本思想是,这种方法为对象添加了一层薄薄的验证。

如果我的要求是这些方法中的每一个都必须返回相同的公共对象,那么适配器对象有什么帮助?如果我的要求是这些方法必须返回相同的公共对象,那么适配器对象有何帮助?它在哪里合适?