我有很多方法(在这种情况下,从Web服务,但也许这没有影响?)来调用。它们已经是固定版本,不会更改,这取决于我适应它们。我已经在我的项目上有代理了,事实上,我已经给他们打电话了,项目还可以。我可以调用执行类似功能的不同类(使用不同的方法和类型)吗?
该类的主要方法获取一些输入参数(事务类型和包含事务数据的XML字符串)。基于TransactionType,我知道应该调用哪个类和方法。我还必须为它提供一个它所期望的类型变量,它已经从提供的XML构建而来。下面是今天(我没有代码就在这里,所以原谅我的语法错误),大约是如何:
public class MyClass()
{
public void MyMethod(string TransactionType, string XML)
{
switch(TransactionType) {
case "1":
type1VO type1Object = (new Deserializer<Type1>()).XML2Object(XML);
ws = new WSProxy1();
string response = ws.Method1(type1VO);
//
// lots of other lines of code that use type1VO, type1Object, the response, etc.
//
break;
case "2":
type2VO type2Object = (new Deserializer<Type2>()).XML2Object(XML);
ws = new WSProxy2();
string response = ws.Method2(type2VO);
//
// same structure here, but handling types specific for "case 2"
//
break;
}
...
}
}
它的推移和。今天,这段代码已经在运行,处理大约15种不同的事务类型,但是它的开发方式如上所述。在我要改变它的时候(会将这段代码移到它自己的库中,因为其他系统需要这个逻辑),我认为它可以从一些代码优化中受益。另外,上面的代码非常简化:每行都有更多的行处理特定的类型,我只是举了一个例子。
因为它的工作原理,我并不担心,但对我来说看起来并不那么“优雅”。给我的印象是某种设计模式可以处理这种情况,并且我可以用一个块处理任何事务,而不是为每个事务类型重复它。也许我错了,这不可能完成,我只是通过查看重复的代码来“感受”它。
这是C#.NET 2.0版,但我不介意是否有涉及其他版本或语言的答案。我更关心涉及的概念。我感谢你们提供的任何提示,他们都很棒。
谢谢你的提示,哥们。我尝试过使用更接近这个的东西,但是我仍然因为必须在子类中继续重复代码而感到困扰。也许,有时候没有“魔法”可以做,而你必须接受它,我想这可能是其中一种情况。再次感谢非常简单而有效的格式! – 2011-02-04 18:39:05
如果你发现你仍然在重复代码,那意味着可能有更多的东西被拖入基类。这是寻找共同点并利用它们的问题。 – unholysampler 2011-02-04 19:09:36