【问题标题】:Are utility classes allowed with the Single Responsibility Principle (SRP)单一职责原则 (SRP) 是否允许使用实用程序类
【发布时间】:2012-10-15 07:41:37
【问题描述】:

我刚刚回答了一个与 SRP 相关的问题,这让我想到:SRP 在实用程序类上有何影响?

根据定义,实用程序类往往会做很多事情。我可以看到单个接入点上的门控相关实用程序是如何有用的。根据 SRP 标准,您不能在一个类中实现这些实用程序。这是否意味着实用程序类是禁止的,或者如果它只是多个类的外观,SRP 是否允许它,每个类都遵守 SRP?

【问题讨论】:

标签: tdd solid-principles single-responsibility-principle


【解决方案1】:

实用程序类被视为反模式

  1. 违反了您提到的 SRP,因为它通常需要承担多个责任。
  2. 大部分是静态类,不利于测试设计能力,不能mock。
  3. 名称本身没有意义,它们通常被命名为HelperUtilUtility之类的。

纠正:

将您的实用程序类划分为更小的具有有意义名称的非静态类,每个类只承担一项职责。

【讨论】:

  • 我可能错了,但我觉得实用程序类确实遵循 SRP。由于 UtilityClass 的职责是接受输入并对输入执行操作并提供输出。类中的每个函数都执行相同的操作。因此,实用程序类确实具有修改输入和提供输出的单一职责。
  • 您的论点无效。 1) 仅当实用程序类设计不当并且执行超出其范围的功能时才为真(就好像 Math 执行日期函数一样),2) 您不需要模拟实现,因为它们通常定义良好可以轻松测试的程序,可以模拟参数,但无需模拟实现 3)如果您有一些重复的功能将被您的 20 个模块使用,这并不是没有意义的。如果要更改某些内容,则需要搜索所有重复代码而不是焦点。
猜你喜欢
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多