【问题标题】:Does Null Object Pattern break Interface Segregation principle?空对象模式是否打破了接口隔离原则?
【发布时间】:2016-05-20 20:34:23
【问题描述】:

Interface Segregation principle 声明:

不应强迫客户依赖他们不使用的方法。

在 Null 对象模式中,实现接口的 Null 类不对其进行任何操作。这是故意的。

但是,这取决于它不使用的方法。或者它不会违反原则,因为它实际上只是依赖于它,在实现的方法中不做任何事情?

【问题讨论】:

  • 客户端正在使用空对象上的方法。该方法什么都不做对客户端来说是不透明的。
  • 空对象的意义在于使用了方法;他们只是没有显着的效果。例如,如果一个接口指定了一个返回列表的方法,则该接口的空对象实现可以返回一个空列表。关键是使用该空对象的客户端确实调用了返回列表的方法,并且需要获取一个列表。
  • 感谢约书亚和安迪。现在我有了更好的理解。
  • 一个更有趣的问题是:“空对象模式是否违反了 Liskov 替换原则?”。

标签: java c# solid-principles null-object-pattern


【解决方案1】:

通常,Null 对象模式不采用任何依赖项。下面是一个典型的 Null 对象的样子:

public class NullDataStore : IDataStore
{
    public void StoreData(Data data)
    {

    }
}

在这种情况下,NullDataStore 类没有依赖关系,因此它不依赖于它不使用的方法。所以它不会破坏 ISP。

【讨论】:

    【解决方案2】:

    Null 对象模式 本身并没有破坏接口隔离原则

    打破整个原则的不是空对象,而是空对象的接口,它可能会或可能不会暴露与注入对象的给定操作无关的成员。

    如果 null 对象实现了一个接口,并且项目的一部分可能使用具有其成员的实际实现的常规对象,并且该接口公开正是实际需要的内容,那么 接口隔离原则并没有被给定的接口打破。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 2021-11-12
      • 1970-01-01
      相关资源
      最近更新 更多