你的问题并不是百分之百的清楚,但我猜这是一个核心产品工程团队(TeamA)负责生成平台代码,以及一个顾问或“专业服务”团队,他们负责产品并为客户实施。专业服务团队希望能够修改内容,但也能够从产品工程中获取补丁或版本升级,而无需进行代码合并。(否则,简单的解决方案是就地修改,而不是扩展和重写。)
//This is what TeamA provides in a release
public class BaseClass
{
public Method1();
public Method2();
}
public class CustomBaseClass : BaseCLass
{
//No code. This is just a pass-through class
}
public class A : CustomBaseClass
{
public override Method1();
public override Method2();
}
public class B : CustomBaseClass
{
public override Method1();
public override Method2();
}
public class C : CustomBaseClass
{
public override Method1();
public override Method2();
}
然后,当TeamB需要定制基类的某些内容时,他们只需要在一个地方完成,而不需要更改其他内容:
//This is how it looks when TeamB is done with it
public class BaseClass
{
public Method1();
public Method2();
}
public class CustomBaseClass : BaseCLass
{
public override Method1(); //customized now, and will affect all existing classes automatically
}
public class A : CustomBaseClass
{
public override Method1();
public override Method2();
}
public class B : CustomBaseClass
{
public override Method1();
public override Method2();
}
public class C : CustomBaseClass
{
public override Method1();
public override Method2();
}
当TeamB需要从TeamA获取产品版本时,他们可以保留CustomBaseClass(必须有一个仅用于定制的协议)并更新其他所有内容。这样定制是向前兼容的,不需要合并,只需要一点测试。
//This is how it looks when TeamA provides a new release with a new method
public class BaseClass
{
public Method1();
public Method2();
public NewMethod();
}
public class CustomBaseClass : BaseCLass
{
public override Method1(); //customized now, and will affect all existing classes automatically
}
public class A : CustomBaseClass
{
public override Method1();
public override Method2();
}
public class B : CustomBaseClass
{
public override Method1();
public override Method2();
}
public class C : CustomBaseClass
{
public override Method1();
public override Method2();
}