C# 使用封装来处理WCF服务继承问题怎么样?
这个问题是关于Microsoft WCF环境中的编程和最佳实践的理论问题,特别关注Web服务 web服务中的继承 考虑这样一种情况,我们需要定义一些功能。我们希望使用web服务向世界公开这些功能。功能由接口建模(在处理分布式系统等时,这是一个非常好的实践)。因此,我们有如下内容:C# 使用封装来处理WCF服务继承问题怎么样?,c#,.net,wcf,C#,.net,Wcf,这个问题是关于Microsoft WCF环境中的编程和最佳实践的理论问题,特别关注Web服务 web服务中的继承 考虑这样一种情况,我们需要定义一些功能。我们希望使用web服务向世界公开这些功能。功能由接口建模(在处理分布式系统等时,这是一个非常好的实践)。因此,我们有如下内容: /// /// Functionalities for a certain context, calling them A functionalities /// public interface IFunctiona
///
/// Functionalities for a certain context, calling them A functionalities
///
public interface IFunctionalitiesA {
FunctionalityA1ResMsg FunctionalityA1(FunctionalityA1ReqMsg msg);
FunctionalityA2ResMsg FunctionalityA2(FunctionalityA2ReqMsg msg);
FunctionalityA3ResMsg FunctionalityA3(FunctionalityA3ReqMsg msg);
}
///
/// Functionalities for a certain context, calling them B functionalities
///
public interface IFunctionalitiesB {
FunctionalityB1ResMsg FunctionalityB1(FunctionalityB1ReqMsg msg);
FunctionalityB2ResMsg FunctionalityB2(FunctionalityB2ReqMsg msg);
}
///
/// Functionalities for a certain context, calling them C functionalities
///
public interface IFunctionalitiesC {
FunctionalityC1ResMsg FunctionalityC1(FunctionalityC1ReqMsg msg);
FunctionalityC2ResMsg FunctionalityC2(FunctionalityC2ReqMsg msg);
FunctionalityC3ResMsg FunctionalityC3(FunctionalityC3ReqMsg msg);
FunctionalityC4ResMsg FunctionalityC4(FunctionalityC4ReqMsg msg);
}
///
/// Functionalities for a certain context, calling them D functionalities
///
public interface IFunctionalitiesD {
FunctionalityD1ResMsg FunctionalityD1(FunctionalityD1ReqMsg msg);
FunctionalityD2ResMsg FunctionalityD2(FunctionalityD2ReqMsg msg);
}
现在让我们考虑所有这些功能可以通过一些服务来实现。但是,并不是必须要有一个服务来实现所有这些功能。一个服务可以实现其中的一些,另一个服务可以实现其中的另一个子集。我特别要求考虑以下情况:
///
/// This service implements functionalities A and B.
///
public class ServiceS1 : IFunctionalitiesA, IFunctionalitiesB {
... /* Implementing interfaces methods */
}
///
/// This service implements functionalities C and D.
///
public class ServiceS2 : IFunctionalitiesC, IFunctionalitiesD {
... /* Implementing interfaces methods */
}
请特别注意,这两项服务将在内部创建一些重要的内容。我的意思是,他们拥有只有他们才能访问的资源,例如,第一个服务可能保留一个元素数组,第二个服务也可能保留一个元素数组。简言之,它们不是虚拟服务,它们具有状态和资源,并且受到外部访问的保护(因此它们被声明为public
或protected
)
现在让我们考虑一下,我们想实现一个服务,可能运行在一个不同的站点上,实现所有的功能。在处理各自实现的方法时,此服务的行为将与上面介绍的两个完全相同。不幸的是,我们无法从这两个方面得出结论。因此,我们需要这样做:
public class GlobalService :
IFunctionalitiesA, IFunctionalitiesB, IFunctionalitiesC, IFunctionalitiesD {
...
}
封装。。。这可能是答案吗?
问题是:
如何在实现子集的两个服务中重用逻辑
整体功能有哪些
我最后想做这样的事情:
public class GlobalService :
IFunctionalitiesA, IFunctionalitiesB, IFunctionalitiesC, IFunctionalitiesD {
///
/// Encapsulating ServiceS1
///
protected ServiceS1 srvs1;
///
/// Encapsulating ServiceS2
///
protected ServiceS2 srvs2;
public GlobalService() {
this.srvs1 = new ServiceS1();
this.srvc2 = new ServiceS2();
}
///
/// Methods are redirected internally to the reused implementation
/// This is to be done for all methods
///
public FunctionalityA1ResMsg FunctionalityA1(FunctionalityA1ReqMsg msg) {
return thissrvs1.FunctionalityA1(msg);
}
...
}
通过这样做,我可以重用实现的逻辑,而无需一次又一次地创建冗余代码。当然,这种方法可能仅限于某些情况,但在这些情况下(毕竟没有那么严格)
这是解决问题的好办法吗?你有不同的想法吗