1

我们正在开发两条共享相同代码的产品线。

对于不同的功能,我让两个产品线实现相同的接口(或在某些情况下为基类),这些类型将在 Main 类中创建(这两个产品线是分开的)并进一步传递到下游。

对于深入业务逻辑的代码,很难有特定于产品线的代码。我们不想使用 if(ProductLine == "ProductLine1") 和 else 方法。

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

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

你知道解决这个问题的更好方法吗?请注意,ProductLine1 已经存在,而 ProductLine2 是新事物(但 90% 与 ProductLine1 相似)。我们不能进行剧烈的重构,使得两条产品线都存在。我们希望尽可能减少侵入性的代码更改。

工厂方法通常会公开一个接口,但接口的问题是我无法公开同样需要的静态类型。

如果一些专家能提供一些启示,我将不胜感激。

4

1 回答 1

1

你的方法听起来不错。

您为什么不使用像 NInject 或 Unity 这样成熟的 IoC 框架,而不是定制的工厂?您可以为每个客户端实现两次服务,并在容器配置文件中静态选择一个。这样,如果您添加另一个实现,您甚至不需要更改单行代码,您只需重新配置,即在 xml 文件中进行一些更改。

无论如何,IoC 容器只是一个工具,不管使用与否,它只是取代了您的工厂(IoC 容器有时被称为“类固醇工厂”)。

于 2013-03-20T20:39:49.770 回答