agile - 帮助理解单一职责原则

标签 agile single-responsibility-principle

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

3年前关闭。




Improve this question




我试图了解责任实际上是什么,所以我想举一个我目前正在做的事情的例子。我有一个应用程序可以将产品信息从一个系统导入到另一个系统。应用程序的用户可以为一个系统中想要在另一个系统中使用的产品字段选择各种设置。

所以我有一个类,比如说 ProductImporter,它的职责是导入产品。这个类很大,可能太大了。

此类中的方法很复杂,例如 getDescription。这种方法不是简单地从其他系统中获取描述,而是根据用户设置的各种设置来设置产品描述。如果我要添加一个设置和一种获取描述的新方法,这个类可能会改变。

那么,这是两个责任吗?是否有一种进口产品和一种获得描述。看起来是这样,我拥有的几乎所有方法都在它自己的类中,这似乎有点矫枉过正。

我真的需要很好地描述这个原则,因为我很难完全理解。我不想要不必要的复杂性。

最佳答案

“责任”在该原则中被定义为改变的理由。在这种情况下,您的类(class)的唯一职责是导入产品。如果导入产品的方式发生变化,那么类别也应该发生变化。

目的是避免让不同的东西同时改变同一个类。例如,如果您的产品导入器类还定义了它的输出格式,那么它将有两个职责,很可能输出格式与导入数据的机制完全无关。

现在,这个类很大,而且 getDescription() 还设置了一个描述,这并不是直接违反 SRP,而是违反了不同的原则。也就是说,您应该避免拥有庞大的类(表明缺乏设计),并且每个方法都应该做一件事情(这将是 SRP 的更具体版本。)

关于agile - 帮助理解单一职责原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2297256/

相关文章:

TFS 任务和错误 : Should I re-open a task if I find bugs?

agile - 敏捷软件开发项目如何收费/预算?

c# - 什么是显示松耦合类和接口(interface)之间关系的好方法?

agile - 您是瀑布式组织中的敏捷/务实的开发人员吗?

agile - 连续进行 Scrum 冲刺会导致倦怠吗?

agile - 你如何在 "Agile Development"和 "Scope Creep"之间画线?

c# - 我的功能是否违反了 SRP 或其他最佳实践?

oop - 您如何定义单一职责?

swift - 使用 Swift 枚举减少函数中的参数数量

inversion-of-control - 控制反转、带 SRP 的依赖注入(inject)和延迟加载