如何重构
Posted utah-lee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何重构相关的知识,希望对你有一定的参考价值。
基于接口而非实现编程,主要的目的是灵活的替换实现类。同样是生成ID的方法,针对日志ID、用户ID、订单ID,这三个完全是三个不同的业务,所以不存在相互替换的场景,所以在实现类命名上 LogTraceIdGenerator、UserIdGenerator、OrderIdGenerator这三种命名方式就不合理了。
好的一种命名方式是,我们抽象出两个接口(不以业务场景为区分,以功能实现不同做区分),一个是 IdGenerator,一个是 LogTraceIdGenerator,LogTraceIdGenerator 继承 IdGenerator。实现类实现接口 IdGenerator,命名为 RandomIdGenerator、SequenceIdGenerator 等。这样,实现类可以复用到多个业务模块中,比如前面提到的用户、订单。
代码或函数依赖一个对象,且这个对象参与逻辑执行(依赖这个对象的输出)但又不可控,这时可以使用依赖注入的方式提高代码的可测试性(依赖注入方便mock)。
关于单测:
- 需要测试的是函数定义的功能,而不是具体的实现。即使函数实现逻辑改变了,单元测试用例应该仍然有效可用。
- 单元测试如何写,主要是看函数是如何定义的。不同的定义,需要测试的点也不同。
以上是关于如何重构的主要内容,如果未能解决你的问题,请参考以下文章