4

我刚刚阅读了关于单一职责原则的内容,Robert C. Martin 曾指出,有时很难看出一个类有多个职责。

任何人都可以提供这样一个类的例子吗?

4

2 回答 2

4

考虑一个具有方法的 HTTP 类

  • 获取(网址网址)
  • 发送请求(字符串请求)

这两种方法都与 HTTP 有关。但是,Get 和 SendRequest 具有不同的抽象级别。Get 可能实际上使用 SendRequest 来发送 GET 请求。因此,SendRequest 应该在一个低级 HTTP 类中,而 Get 应该在一个使用低级 HTTP 的高级 HTTP 类中。

于 2010-09-30T09:27:36.593 回答
2

这很有趣,因为另一个StackOverflow 用户几个小时前在他的问题中展示了这样的例子。

考虑这个类:

[Serializable]
class MyClass
{
  //Serializable fields
  public void Save()
  {
     //Saving data into file
  }

  public void Load()
  {
    //Loading data from file
  }
}

这个类(MyClass)有几个单独的角色:

  1. 这个类是可序列化的

  2. 这个类可以将他的状态保存在一些存储中

在许多情况下,这不是一个好主意,因为当我们打算将持久存储从简单的二进制文件更改为 Xml 文件或远程存储(例如通过 WCF)时,我们不能轻易地重用这个可序列化的实体。

您可以创建子类,例如 MyClassWCFSaver,但即使在这种情况下,使用可序列化的类 MyClass 和 MyClassSavers 的独立层次结构要容易得多(对于 xml、二进制或 WCF 存储有几个不同的子类)

顺便说一句,这就是为什么在许多 ORM 中我们经常将实体与存储库区分开来(参见存储库模式)。

于 2010-09-30T19:22:00.603 回答