0

假设我有两个设置(为了简单起见)改变了我的类型在可重用库中的行为。

我可以定义一个配置类:

class Config {
  public bool Behaviour1 { get; set; }
  public bool Behaviour2 { get; set; }
}

如果我这样做,我必须将实例从组合根(无论是否使用 IoC 处理)传播到整个层次结构。

代码将被大量条件语句侵入,降低可读性、可维护性和可扩展性。

定义两种行为类型不是更好吗?

public class Behaviour1 : IBehaviour1 {}

public class Behaviour2 : IBehaviour2 {}

删除其他类型从Config. 比每个需要行为的类都依赖于IBehaviourX它的工厂,它的工厂将根据Config类型注入适当的具体。

这样,只有少数顶级类型将取决于 Config 并且分配行为的行为(请原谅双关语)不会传播到整个层次结构。

在这种情况下,我对您的解决方案感兴趣。

4

2 回答 2

1

您可能会想到创建方法设计模式。

必须根据配置参数更改类的行为会出现问题,因为这样您的类将明显违反 SRP 规则,创建子类并使用虚拟/覆盖方法来获得与配置相关的所需行为并使用创建方法模式得到正确的对象

于 2013-03-08T07:07:31.410 回答
1

我会说你在将你的行为实现为类/接口而不是处理条件等差异方面走在正确的轨道上。

您可能想看看策略模式,因为您当前的想法似乎正朝着这个方向发展。使用 IoC,您的想法应该可以正常工作,这可能是我愿意接受的。

于 2013-03-09T05:36:25.960 回答