【发布时间】:2014-06-29 23:22:40
【问题描述】:
我需要帮助澄清我对单一职责原则 (SRP) 的(错误)理解。
在我从事的许多项目中,我的同事认为 SRP 意味着一个类应该实现非常有限的功能,例如计算对象集合的一些总数。这导致类具有一种公共方法(一种责任),例如CalculateTotals(...)。我不是 DDD 专家,但据我所知,这导致了贫血域模型、DTO 和无穷无尽的微服务。
采用这种方法并将 DRY 添加到混合中会导致在应用程序的不同部分重用这些类。
我倾向于将 SRP 放在更高的层次上,即需求层次上。例如,需要为报告计算总计,而需要为与税收相关的计算计算总计。在这种情况下应用 DRY 可能会导致意外错误。当由于报告要求的变化而需要更改总计计算逻辑时,如果我们应用了 DRY 并重用了该类,我们将中断我们的税收计算。
鉴于更改的原因应该只是由于需求的更改(我认为重构不适用于此处),DRY 原则是否应该仅适用于单个用例?
如果上述说法正确,是否意味着我们不必将税收计算分成单独的类?好吧,我们可以这样做来简化代码,但是出于 SRP 的原因我们不这样做吗?
我的想法错了吗?
【问题讨论】:
-
如果您添加示例类会有所帮助。不是代码,而是公共签名。它现在看起来像什么,你想如何修改它?如果您添加有关实际税收计算的更多信息也会有所帮助
-
jgauffin,这更像是一个普遍的问题,而不是一个具体的案例。当我查看需求的细节,然后花费大量时间以 SRP 的名义挖掘无休止的抽象和间接以找到实现时,我感到很沮丧。大多数情况下,它属于测试覆盖的小班。这一切都很干净且易于理解,但感觉断章取义并且脱节......这是SRP被带到不健康的极端还是只是我有中年危机;)
-
那么不要在问题中给出具体的例子。
标签: design-patterns domain-driven-design solid-principles object-oriented-analysis single-responsibility-principle