2013-03-20 28 views
1

我们正在研究共享相同代码的两条产品线。2共享相同代码的产品线

对于不同的功能,我有两条产品线都实现相同的接口(或者在某些情况下是基类),并且这些类型将在Main类(两个产品线分开)中创建并向下游传递。

对于业务逻辑内部的代码,很难有产品线特定的代码。我们不希望用户if(ProductLine ==“ProductLine1”)和其他方法。

所以我打算实现一个Factory类,它将有静态方法返回NewObject1(),NewObject2()等。此Factory类将作为Factory.RegisterClient(ProductLine1)在Main类中进行注册。

因此,通过上述方法,工厂(其内部包含ProductLine1Factor & ProductLine2Factory)知道要创建哪种类型的对象。

您是否知道解决此问题的更好方法?请注意,ProductLine1已经存在,ProductLine2是新东西(但与ProductLine1相似)为90%。我们不能进行剧烈的重构,以至于两条产品线都存在。我们希望尽可能进行微创代码更改。

工厂方法通常会暴露一个接口,但接口的问题是我无法暴露也需要的静态类型。

如果有些专家会说点什么,我会非常感激。

回答

1

你的方法听起来不错。

为什么不使用像NInject或Unity这样的完全成熟的IoC框架,而不是定制的工厂?您可以为每个客户端实施两次服务,并静态地在容器配置文件中选择一个。这样,如果添加另一个实现,甚至不需要更改代码的单行,只需重新配置即可在xml文件中进行一些更改。无论如何,IoC容器只是一个工具,无论是否使用它,它只是取代你的工厂(IoC容器有时被称为“类固醇工厂”)。

+0

谢谢Wiktor。 Unity也是一个不错的选择。 – scriptuser 2013-03-22 16:18:49