目前我正在开发两种解决方案(首先针对A国,第二种针对B国),这两种解决方案非常相似。我正在使用wpf,c#,mvvm,sql server。
某些模块在每个解决方案中都是相同的,其中一些模块部分不同(例如,某些类具有其他字段或方法),有些模块完全不同(例如VAT模块)。对我来说,开发完全独立的解决方案并不是最好的解决方案(时间成本)。
所以,我正在考虑创建两个解决方案(A和B),它只包含主屏幕,我将准备用户界面。然后,在第三个解决方案(C)中,我将有项目(=模块)并从A或B链接它们。
如果两个版本的模块相同 - 没问题。如果完全不同 - 好吧,我必须独立开发它。但是,问题是如何设计略有不同的模块?
我应该使用抽象工厂设计模式并在AbstractProduct中输入相同的所有内容,并在ConcreteProducts中添加其他字段/方法吗?对于WPF表单,我不能使用这种模式 - 我必须为每个版本开发一个表单。
THX。
答案 0 :(得分:0)
你真正想要使用的是依赖注入。
首先创建一个接口然后让你的具体impl在每个国家实现这个接口。
interface ISolution
{
....
}
class CountryA : ISolution{
...
}
class CountryB : ISolution{
...
}
然后将这些接口注册到组合根处的impl映射。
private static IContainer ConfigureDependencies() {
return new Container(x =>{
x.For<ISolution>().Use<CountryA>();
});
}
然后你要求容器给你一个ISolution实例。它会为你提供正确的impl。
你可以为CountryB做同样的事。
您可以进行自动接线或后期绑定,这是更具动态性的。你可以切换impls。
查看结构图以获取示例。