我正在开发一个使用Oracle的"Siebel CRM"产品的C#项目.Siebel提供了两个名称空间和类,用于以编程方式连接到它的服务,具体取决于您是要连接到服务器还是连接到客户端会话:
SiebelBusObjectInterfaces.SiebelDataControl
TWSiebelLib.SiebelWebApplication
Run Code Online (Sandbox Code Playgroud)
SiebelDataControl公开了一种显式登录基于服务器的资源的特定方法:
bool SiebelDataControl.Login(string connString, string userName, string passWord)
Run Code Online (Sandbox Code Playgroud)
所有其他方法在两个类之间是相同的..
我目前正在维护我的两个版本的应用程序 - 每个版本对应一个不同的连接类.随着我构建的功能越来越具有包容性和复杂性,将这两个应用程序分开维护变得非常困难.我已将连接部分拆分为它自己的类,但我仍然需要在开发时在应用程序之间复制和粘贴代码.
理想情况下,我想要一个VS解决方案,它有一个我所有自定义代码的实例和一些逻辑,用于确定用户决定使用哪两个连接类.
从理论上讲,我想要的是:
class SiebelAppWrapper {
public Object m_SiebelAppInstance;
private Boolean m_isConnected;
private short m_conType;
public static short SERVER_CON = 1;
public static short CLIENT_CON = 2;
public SiebelAppWrapper(short conType) {
if (conType == SERVER_CON) {
m_SiebelAppInstance = new SiebelDataControl();
} else if conType == CLIENT_CON {
m_SiebelAppInstance = new SiebelWebApplication();
}
m_conType = conType;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,由于显而易见的原因,编译器对此并不满意.
我对C#和.NET开发一般都很陌生,所以我希望有一些方法可以在不复制所有dependend代码的情况下合并这两个类.
非常感谢您的帮助.
Jon*_*Jon 11
根据您的描述,它听起来像一个可行的选择:
ISiebelWhatever,描述您将要使用的两个类之间的所有常用功能.ISiebelWhatever.ISiebelWhatever的类型m_SiebelAppInstance.当然,这只有在源类不是sealed这样的情况下才有效,并且对签名不相同的方法没有帮助.此外,通用接口方法有点明显,这引出了一个问题:源库是否已经有可能实现这一点?或者这两个班级有共同的基础?你应该先检查一下.
如果有两个类之间没有共享但你需要使用的方法,那么你还需要决定一个共同的签名(声明ISiebelWhatever)并让你的两个子类通过适当地转发到它们现有的非共享来实现它.方法.
| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |