首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是SRP违规吗?

这是SRP违规吗?
EN

Software Engineering用户
提问于 2020-01-28 15:18:51
回答 1查看 165关注 0票数 2

假设我有一个类,它表示一个树元素。可以更改元素,可以将受检查的子元素添加到元素中(例如,通过add()方法)。但是,我还有一个类,它包含树的根(State)。为了方便起见,我增加了add()方法的静态重载,它将元素添加到根中。作为结果,元素类需要通过单例获得当前应用程序状态(存在是对的),因此元素类被绑定到State类。是不是很好?这样做有道理吗?否则,我必须将方法add添加到State中(但这似乎违反了SRP )。

EN

回答 1

Software Engineering用户

发布于 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(),而不会破坏任何坚实的原则。
票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/404387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档