我是一个有用的助手,可以为您翻译文本。
我一直在寻找解决我们公司一个复杂问题的方法。我们公司是一个由四个公司组成的联盟,覆盖了我们国家的四个“地区”。
我们分支机构开发了一个C# WebService,并将该项目分发给其他分支机构的开发人员。每个人都在自己的服务器上托管WebService。
现在,由于不同公司之间的关系不好,我必须调整现有的方法以适应我们的“区域需求”。
所以我有这个类:
方法
有人有处理这个问题的想法吗? 回答后编辑 我决定采用策略设计模式,在完成后我想到“如果一个分支决定覆盖任何方法,则所有其他分支都必须使用其地区策略类中的国家代码覆盖相同的方法”。
所以这不是很好。相反,我做了这个:
我一直在寻找解决我们公司一个复杂问题的方法。我们公司是一个由四个公司组成的联盟,覆盖了我们国家的四个“地区”。
我们分支机构开发了一个C# WebService,并将该项目分发给其他分支机构的开发人员。每个人都在自己的服务器上托管WebService。
现在,由于不同公司之间的关系不好,我必须调整现有的方法以适应我们的“区域需求”。
所以我有这个类:
public partial class MyClass{
public static ComplexReturnType MyMethod(){
// National code. Everyone uses this block of code.
}
}
我创建了一个名为“Regional”的文件夹,将在向其他分支分发DLL时从编译中排除该文件夹。在该文件夹内,我创建了MyClass.cs文件,并按照以下方式继续操作:
public partial class MyClass{
public static ComplexReturnType MyMethod(){
// Regional code. Only my commpany will use this.
}
}
方法
MyMethod
在其他文件中被调用。我了解partial
的工作原理,但是我找不到一个适合我的需求而不需要创建子类并重写其他文件中已经存在的每个调用的解决方案。有人有处理这个问题的想法吗? 回答后编辑 我决定采用策略设计模式,在完成后我想到“如果一个分支决定覆盖任何方法,则所有其他分支都必须使用其地区策略类中的国家代码覆盖相同的方法”。
所以这不是很好。相反,我做了这个:
public class VStrategy
{
public virtual ComplexReturnType MyMethod(){
// National code. Method moved from MyClass
}
public virtual AnotherReturnType MySecondMethod(){
// National code. Method moved from MyClass
}
}
public class SomeBranchStrategy: VStrategy
{
public override ComplexReturnType MyMethod() {
// Regional code for overriding a method
}
}
public class AnotherBranchStrategy: VStrategy
{
public override AnotherReturnType MySecondMethod(){ {
// Regional code for overriding a method
}
}
public class MyClass
{
private static VStrategy _strategy = new VStrategy();
public static VSTrategy Strategy { get {...}; set {...} }
public static ComplexReturnType MyMethod()
{
return Strategy.MyMethod();
}
public static ComplexReturnType MySecondMethod()
{
return Strategy.MySecondMethod();
}
}
这样,在没有界面的情况下,每个分支都可以覆盖任何它们想要覆盖的方法,而不会对其他分支造成影响。您只需将该方法代码移动到VStrategy类中,并在自己的区域类中进行覆盖。
希望本文对处于此种情形的任何人有所帮助。