如何重构

基于接口而非实现编程,主要的目的是灵活的替换实现类。同样是生成ID的方法,针对日志ID、用户ID、订单ID,这三个完全是三个不同的业务,所以不存在相互替换的场景,所以在实现类命名上 LogTraceIdGenerator、UserIdGenerator、OrderIdGenerator这三种命名方式就不合理了。

好的一种命名方式是,我们抽象出两个接口(不以业务场景为区分,以功能实现不同做区分),一个是 IdGenerator,一个是 LogTraceIdGenerator,LogTraceIdGenerator 继承 IdGenerator。实现类实现接口 IdGenerator,命名为 RandomIdGenerator、SequenceIdGenerator 等。这样,实现类可以复用到多个业务模块中,比如前面提到的用户、订单。

代码或函数依赖一个对象,且这个对象参与逻辑执行(依赖这个对象的输出)但又不可控,这时可以使用依赖注入的方式提高代码的可测试性(依赖注入方便mock)。

关于单测:

  • 需要测试的是函数定义的功能,而不是具体的实现。即使函数实现逻辑改变了,单元测试用例应该仍然有效可用。
  • 单元测试如何写,主要是看函数是如何定义的。不同的定义,需要测试的点也不同。

猜你喜欢

转载自www.cnblogs.com/Utah-Lee/p/12387279.html