为每个国家开发一个模块略有不同的解决方案

时间:2012-06-04 19:03:46

标签: c# design-patterns software-design

目前我正在开发两种解决方案(首先针对A国,第二种针对B国),这两种解决方案非常相似。我正在使用wpf,c#,mvvm,sql server。

某些模块在每个解决方案中都是相同的,其中一些模块部分不同(例如,某些类具有其他字段或方法),有些模块完全不同(例如VAT模块)。对我来说,开发完全独立的解决方案并不是最好的解决方案(时间成本)。

所以,我正在考虑创建两个解决方案(A和B),它只包含主屏幕,我将准备用户界面。然后,在第三个解决方案(C)中,我将有项目(=模块)并从A或B链接它们。

如果两个版本的模块相同 - 没问题。如果完全不同 - 好吧,我必须独立开发它。但是,问题是如何设计略有不同的模块?

我应该使用抽象工厂设计模式并在AbstractProduct中输入相同的所有内容,并在ConcreteProducts中添加其他字段/方法吗?对于WPF表单,我不能使用这种模式 - 我必须为每个版本开发一个表单。

THX。

1 个答案:

答案 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。

查看结构图以获取示例。