在我的项目中,我必须与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。是否可以通过类继承或其他方式解决此问题?
您可以设计一个将通过builder模式或factory方法实现的类(使用一些创建模式,请阅读有关这些模式的信息,这将有助于您减少代码库)。方法是设计一个将在所有地方使用的通用类。因此,您可以轻松地对其进行修改。您需要弄清楚如何区分您的dll。 DLL的参考可以通过两种方式进行区分:
区分版本后,您可以轻松地将所有dll放在一起并寄出。因此,基本上,您应该设计一个通用的生成器,该生成器将以版本号作为参数并返回准备充分的dll平台。希望对您有所帮助。