帮助理解单一责任原则

时间:2010-02-19 15:07:04

标签: agile single-responsibility-principle

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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