两天的 Review 代码,学到很不少东西,记录下
首先列下关键字:
闭包 、类的单一职责、接口编程、层级依赖 、可扩展、慎用单例、工具类、static
下面一个一个说,只是站在自己理解的层面上
1、闭包
我们都知道 Java 提供了四种不同的访问控制修饰符,用来保护对类、变量、方法和构造函数的访问,但是在编写的过程中很容易忽略这些问题。
这次 Review 时进行了着重强调了修饰符问题,虽然看似很小的问题,要想处理好也是不容易的,对整体包设计都是一个考验。
修改建议:
只有本类或者本模块使用的类,尽量在用 default 访问权限也就是 package 级别访问,只有直接供外部使用的类才使用 public 访问控制修饰符,这样也避免别人乱使用,同时保证了唯一的使用出口,也为之后的扩展设计打好基础。
2、类的单一职责
设计模式中我们常看到单一职责原则,对类对模块同样适用,Review 的时候发现很多毫不相关的功能都写在了一个类中,虽然方便了使用,功能也没有问题,但是后续扩展会引起很多问题,所以还是在编写代码时提前考虑,不然以后还是要修改的,否则就是在为以后挖坑,得不偿失。
3、接口编程
面向接口编程的概念就不说了,自行google,Review 之前的有些代码是没有面向接口编程设计的,完全是功能累计。
修改建议:
将所有外部调用的方法抽成接口,具体的实现类来实现具体逻辑,供外面使用的都是接口,内部实例可以使用工厂模式来创建,如果是单例模式也要返回接口类,而不是实现类同时要注意上面说的闭包原则。
一切的设计都是围绕接口设计,好处是功能清晰,又能避免外部乱调用。
4、层级依赖
这里的层级依赖其实就是类代码之间的相互引用依赖,ReView 的是发现,有些类之间相互引用,或者三个类存在相互引用关系,很多交杂在一起的情况。
例如:两个类相互引用
需要查看引用的代码是不是必要的,很多只是为了拿到当前类的某个状态或者其他,通过接口回调可以实现解耦。
多个类相互引用:
针对业务较多的情况,可以先将各个类按照接口抽离,向外提供方法,避免在A类中可以使用到B类除开放的其他方法。
总之宗旨只有一个,尽可能的做到单向依赖。
5、可扩展
如果你面向接口编程,针对扩展还是比较容易的,也比较容易控制。
我们希望写的是模块而不是顺序执行的程序,模块的东西是否可以简单复用,例如一些重复性的逻辑,是否可以实现自动化控制,里面不关心具体处理流程,而是只关心处理你需要处理的类,也就是更上层的概念,是一种总控的想法。
例如:你有10个Task,你需要的是写出处理 task 流程的模块,而不是处理 task 里面的逻辑,如果将来增加到20个 Task,你的模块也会自适应,这就是目的。
6、慎用单例:
代码中有地方很多单例模式,看上去使用了模式之类的设计会好,但是有一些并不需要使用单例模式就能解决,可能简单 new 一个类就可以,并不需要保存什么状态。
7、工具类
好多打着工具类的旗号,里面就一两个方法,而且还是给自己模块使用,完全不是工具类的概念,这种方式尽早替换修改,移到自己的模块出来即可。
8、static
static 方式不受限制,直接类名点一下就可以使用了,这就会导致很多地方使用、更改,就容易出现问题。
有时候一些类使用现用现创建都可以。
随想随写
网友评论