将行为传播到层次结构的正确方法

时间:2013-03-08 06:59:20

标签: c# design-patterns

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

我可以定义一个配置类:

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和行为的分配行为(请原谅双关语)不会传播到整个层次结构。

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

2 个答案:

答案 0 :(得分:1)

您可以考虑Creation Method设计模式。

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

答案 1 :(得分:1)

我会说你正在将你的行为作为类/接口实现,而不是处理与条件等的差异。

您可能希望查看Strategy Pattern,因为您当前的想法似乎正朝着这个方向发展。使用IoC你的想法应该正常工作,这可能是我愿意接受的。