5

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

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

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

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

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

4

1 回答 1

3

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

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

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

于 2010-02-19T15:13:24.437 回答