寻找正确的设计,通过编译标志

问题描述:

两个不同的web服务我有两个Web服务,用有点不同的API,例如:寻找正确的设计,通过编译标志

void LOG(string , string ,out int) 
int LOG(string ,string) 

其中一个是生产,一个是用于测试。

这种情况下的最佳做法是什么,如何在代码中编写更漂亮的外观... 而不是使丑陋的#IF #ELSE声明在我的主代码中。

第一个是生产型,第二个是测试版。 而且两个版本的功能都是相同的。 他们之间的差异,我有一个WSDL文件从原来的Web服务,我已经使用wsdl.exe yourFile.wsdl /l:CS /serverInterface并得到了我的测试服务,但是当我添加它作为我的应用程序的参考我有一个不同的代理服务器,功能签名一点点不同的。不知道为什么。

+4

您能否提供关于哪个产品是哪个产品以及哪个产品正在测试的信息?你为什么这样做?每个参数是什么?尤其是out int。看起来他们做同样的事情?他们都可以使用第一个签名 – 2011-05-27 07:29:29

+0

@ Oskar Kjellin,看到我的评论 – 2011-05-27 07:34:34

+0

我对你所期望的是一种好奇但是很好奇。你在方法上有不同的签名。所以你知道你不能用同样的方式给他们打电话。但你仍然想以同样的方式给他们打电话。你不想创建一个包装。没有其他办法。如果签名不一样,你不能以同样的方式调用它们 – 2011-05-27 08:28:36

但是当我增加一条,作为参考我的 应用我有一个不同的 代理和函数签名已经 点点different.no知道为什么

我想这是为了避免Web服务客户端类中具有相同签名的两种方法。 如果我找到你的权利,你有两个Web服务实例与一个接口。那么你不需要为你的项目添加两个引用。 只需将web服务的位置指定为实例化的参数,而不是使用无参数构造函数。在技​​术上(因为你用'设计模式'标记了它),你可以使用Strategy模式进行调用,并与依赖注入一起使用。 但是,如果这些w/s实例完全相同,我建议您查找这些WSDL-s或生成的客户端代码的错误。问题在于生成存根,而不是代码中的优雅。

+0

我甚至试图做一些测试项目,甚至在那里我有这个int LOG(string,string)而不是out参数。 – 2011-05-27 07:51:52

+0

如果有不同的签名,你的调用代码有点不同? – artplastika 2011-05-27 07:57:47

+0

你说得对。 – 2011-05-28 20:34:40