2010-02-19 80 views
5

我想了解什么是实际的责任,所以我想用一个我目前正在工作的例子。我有一个将产品信息从一个系统导入另一个系统的应用程序。应用程序的用户可以选择各种设置,以便在一个系统中的哪个产品字段中使用另一个系统中的产品字段。帮助理解单一责任原则

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

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

那么,这是两个责任吗?有没有一种产品可以进口,有一种可以获得产品说明。这似乎是这样的,几乎所有的方法都会在它自己的类中,而且看起来像是过度杀伤。

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

回答

3

“责任”在这个原则中被定义为一个改变的理由。在这种情况下,你们班的单一职责就是进口产品。如果导入产品的方式发生变化,那么该类应该改变。

其目的是为了避免在同一时间改变同一类的不同事物。例如,如果您的产品进口商类还定义了其输出格式,那么它将承担两项责任,输出格式可能与导入数据的机制完全无关。

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

+0

它“显示缺乏设计” - 这是我不知道如何纠正的问题。如果描述方法属于课程内容,而且我必须根据各种设置对各种变体进行说明,那么您还可以如何设计它。我没有看到任何其他的方式。 – user204588 2010-02-19 15:26:17

+0

你可以有一个描述类,其职责是处理变化。等等,当一个责任过大时,将其分解为更小的责任。 – 2010-02-19 15:38:50