我刚刚读到了单一责任原则,有一点罗伯特·C·马丁说,有时很难看出一个班级有多个责任。
任何人都可以提供这样一个类的例子吗?
答案 0 :(得分:4)
考虑一个具有方法
的HTTP类这两种方法都与HTTP有关。但是,Get和SendRequest具有不同的抽象级别。 Get实际上可以使用SendRequest发送GET请求。因此,SendRequest应该在低级HTTP类中,而Get应该在使用低级别的高级HTTP类中。
答案 1 :(得分:2)
这很有趣,因为另一个StackOverflow user在几个小时前在his question中显示了这样的例子。
考虑这个课程:
[Serializable]
class MyClass
{
//Serializable fields
public void Save()
{
//Saving data into file
}
public void Load()
{
//Loading data from file
}
}
这个类(MyClass)几乎没有单独的角色:
此课程可序列化
此课程可以将其状态保存在某个存储空间
在许多情况下,这不是一个好主意,因为当我们希望将持久存储从简单的二进制文件更改为Xml文件或远程存储(例如通过WCF)时,我们无法轻松地重用此可序列化实体。 / p>
你可以创建类似MyClassWCFSaver的子类,但即使在这种情况下,使用可序列化的类MyClass和MyClassSavers的独立层次结构(对于xml,二进制或WCF存储有几个不同的子库)也更容易
BTW,这就是为什么在许多ORM中我们经常将实体与存储库区分开来(参见Repository Pattern)。