帮助理解单一责任原则

use*_*588 5 agile single-responsibility-principle

我试图理解实际上是什么责任所以我想用一个我正在研究的东西的例子.我有一个应用程序,可以将产品信息从一个系统导入另一个系统.应用程序的用户可以选择各种设置,以便在一个系统中的哪些产品字段中使用另一个系统.

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

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

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

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

Vin*_*vic 3

该原则将“责任”定义为变革的理由。在这种情况下,您的班级的唯一责任就是导入产品。如果导入产品的方式发生变化,那么类也应该改变。

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

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