什么时候课程太大或太小?

Sea*_*ull 18 oop

我最近由我公司的一位高级开发人员审核了我的代码.他批评我的设计使用了太多的课程.我很想听听你的反应.

我的任务是创建一个服务,该服务生成一个xml文件,因为它操作了3个其他xml文件.我们将这些命名为aaa.xml,bbb.xmlccc.xml.该服务分两个阶段进行.在第一阶段,它针对bbb.xml清理aaa.xml.在第二阶段,它将第一阶段的产品与ccc.xml合并以产生最终结果.

我选择了一个包含三个类的设计:一个XmlService类,它使用了另外两个类,一个scrubber类和一个merger类.我保持擦洗和合并类是分开的,因为这两个类都很大并且具有不同的逻辑.

我认为我的方法很好,因为它让我的课程变得小而有凝聚力.我的方法也有助于控制我的测试类的大小.

高级开发人员断言,清理和合并类只能由XmlService类使用,因此应该是它的一部分.他觉得这会使XMLService具有凝聚力,这就是他所说的具有凝聚力的意思.他还认为以这种方式分手,会使他们松散凝聚力.

具有讽刺意味的是,我试图打破这些课程以达到凝聚力.你怎么看?谁对或错?我们都对吗?谢谢你的建议.

Hum*_*rto 13

如果您遵循单一责任原则(并且基于您的问题的基调,我认为您确实遵循它),那么答案很明确:

  1. 当一个类不止一个时,它就太大了; 和
  2. 当一个类无法实现其目的时,它就太小了.

这是非常广泛的,而且确实是主观的 - 因此与你的同事的斗争.在你身边,你可以争辩说:

  • 创建其他类绝对没有问题 - 这是一个非问题,编译方面和运行时方面.
  • 服务的当前实现可能表明这些类"属于"它,但这可能会改变.
  • 您可以单独测试每个功能.
  • 您可以应用依赖注入.
  • 您可以减轻理解服务内部工作的认知负担,因为它的代码更小,组织更好.

此外,我认为你的老板对凝聚力有误解.将其视为焦点:程序的重点越窄,凝聚力越高.如果卫星类中的代码在服务类中合并,则后者变得不那么集中(不那么有凝聚力).人们普遍认为,较高的内聚力优于较低的内聚力.试着启发他/她对此的看法.


tQu*_*lla 8

内聚力衡量代码体内功能的相关程度.也就是说,如果合并和擦洗没有很强的相关性,包括它们在同一类中都会降低凝聚力.

单一职责原则也是这里值得一提.创建一个仅用于擦洗的类,另一个用于合并的唯一目的是遵循这个原则.

我会说你的方法比两者更好.