假设我有一个类,它表示一个树元素。可以更改元素,可以将受检查的子元素添加到元素中(例如,通过add()方法)。但是,我还有一个类,它包含树的根(State)。为了方便起见,我增加了add()方法的静态重载,它将元素添加到根中。作为结果,元素类需要通过单例获得当前应用程序状态(存在是对的),因此元素类被绑定到State类。是不是很好?这样做有道理吗?否则,我必须将方法add添加到State中(但这似乎违反了SRP )。
发布于 2020-01-28 20:00:02
SRP不是要做一件事,而是关于改变的理由。
您描述的情况一方面是管理元素的Tree类,另一方面是使用特定树的State类。
乍一看,创建重载以在根级别使用Tree来丰富add似乎并不会破坏SRP:这种重载不会为更改创建一个新的原因。只是方便而已。
不幸的是,还不完全清楚root如何与Tree的一个节点相关联:
root元素,是否只有一个Tree?在本例中,它不是关于SRP的,而是关于OCP和扩展Tree以允许重用的。State将有一个根。但其他类可能有不同的根。那么您的add()重载将属于State,因为它处理的是一个封装的元素。但是add()签名将取决于Tree::add()。在这种情况下,您将破坏SRP。add(),而不会破坏任何坚实的原则。https://softwareengineering.stackexchange.com/questions/404387
复制相似问题