在我的项目中,我必须与一个ERP系统交互,该系统公开了大约30个不同的API DLL。ERP公司系统地创建了他们系统的新版本,我被迫将DLL更改为新版本。然而,并不是我所有的客户都更新了ERP,所以我也不得不维护旧的参考资料。我目前对这个问题的解决方案是:
1)对于每个ERP版本,我创建了一个'ApiWrapper‘项目,引用了该ERP版本的DLL。
2)在我的主项目中,我引用了这些'ApiWrappers‘,并选择了其中的一个。
'ApiWrapper‘中的一个示例函数如下所示:
public void AddContractorAttribute(Ustawienia settings, string attributeCode, string attributeValue, int contractorId)
{
CreateNewSession();
CDNHeal.Kontrahenci AllContractors = (CDNHeal.Kontrahenci)session.CreateObject("CDN.Kontrahenci", null);
CDNHeal.IKontrahent SelectedContractor = (CDNHeal.IKontrahent)AllContractors[$"Knt_KntId = {contractorId}"];
CDNBase.ICollection AllAttributes = (CDNBase.ICollection)(session.CreateObject("CDN.DefAtrybuty", null));
CDNTwrb1.IDefAtrybut SelectedAttribute = (CDNTwrb1.IDefAtrybut)AllAttributes[$"dea_Kod = '{attributeCode}'"];
CDNTwrb1.IKntAtrybut NewAttributeValue = (CDNTwrb1.IKntAtrybut)SelectedContractor.Atrybuty.AddNew(null);
NewAttributeValue.DefAtrybut = (CDNTwrb1.DefAtrybut)SelectedAttribute;
NewAttributeValue.Wartosc = attributeValue;
session.Save();
}现在,我遇到的问题是:如果我想在ApiWrapper中添加或更改一个函数,我必须在每个函数中执行。它们在代码方面没有区别,只是引用了一组不同的DLL。有没有办法通过类继承或其他方式来解决这个问题?
发布于 2019-11-18 16:31:53
您可以设计一个将使用构建器模式或工厂方法实现的类(使用一些创造性的模式,请阅读这些模式,它将帮助您减少代码库)。方法是设计一个泛型类,它将在任何地方使用。因此,您可以轻松地对其进行修改。你需要弄清楚如何区分你的dll。Dll的引用可以通过两种方式加以区分:
在区分版本之后,您可以轻松地将所有dll放在一起并发布它。因此,基本上您应该设计一个通用构建器,它将接受一个版本号作为参数,并返回一个准备充分的dll工作台。希望能有所帮助。
https://stackoverflow.com/questions/58910205
复制相似问题