我刚刚阅读了关于单一职责原则的内容,Robert C. Martin 曾指出,有时很难看出一个类有多个职责。
任何人都可以提供这样一个类的例子吗?
我刚刚阅读了关于单一职责原则的内容,Robert C. Martin 曾指出,有时很难看出一个类有多个职责。
任何人都可以提供这样一个类的例子吗?
考虑一个具有方法的 HTTP 类
这两种方法都与 HTTP 有关。但是,Get 和 SendRequest 具有不同的抽象级别。Get 可能实际上使用 SendRequest 来发送 GET 请求。因此,SendRequest 应该在一个低级 HTTP 类中,而 Get 应该在一个使用低级 HTTP 的高级 HTTP 类中。
这很有趣,因为另一个StackOverflow 用户几个小时前在他的问题中展示了这样的例子。
考虑这个类:
[Serializable]
class MyClass
{
//Serializable fields
public void Save()
{
//Saving data into file
}
public void Load()
{
//Loading data from file
}
}
这个类(MyClass)有几个单独的角色:
这个类是可序列化的
这个类可以将他的状态保存在一些存储中
在许多情况下,这不是一个好主意,因为当我们打算将持久存储从简单的二进制文件更改为 Xml 文件或远程存储(例如通过 WCF)时,我们不能轻易地重用这个可序列化的实体。
您可以创建子类,例如 MyClassWCFSaver,但即使在这种情况下,使用可序列化的类 MyClass 和 MyClassSavers 的独立层次结构要容易得多(对于 xml、二进制或 WCF 存储有几个不同的子类)
顺便说一句,这就是为什么在许多 ORM 中我们经常将实体与存储库区分开来(参见存储库模式)。