设计与风格
一般来说,面向对象编程都是通过面向对象编程语言来进行的,但是,不用面向对象编程语言,我们照样可以进行面向对象编程;
反过来说,即便我们使用面向对象编程语言,写出来的代码也不一定是面向对象编程风格的,也有可能是面向过程编程风格。
哪些代码设计看似面向对象,实际上是面向过程的?
1.滥用getter、setter方法
在设计实现类的时候,除非真的需要,否则尽量不要给属性定义 setter 方法。除此之外,尽管 getter 方法相对 setter 方法要安全写,但是如果返回的是集合容器,那也要防范集合内部数据被修改的风险。
2.滥用全局变量和全局方法
全局变量包括:单例类对象、静态成员变量、常量
全局方法包括:工具类静态方法
(1)常量类影响可维护性、可复用性
改进方法:
- 拆解为功能更加单一的多个类;
- 哪个类用到了某个常量,就直接把这个常量定义到这个类中。
(2)Utils类
产生的原因: 代码复用,但是仅仅是为了代码复用而生硬地抽象出一个父类,会影响代码的可读性。
定义 Utils类前思考:这个类真的需要吗?Utils 类中某些方法可以定义到其他类中吗?
改进方法: 最好能够细化一下,针对不同的功能,设计不同的类。
3.定义数据和方法分离的类
数据定义在一个类中,方法定义在另一个类中。实际上MVC 三层结构做 Web 方面的后端开发,这样的代码你可能天天都在写。
传统的 MVC
结果分为 Model 层、Controller 层、View 层,不过在做前后端分离之后,三层结构在后端开发中,会稍微有些调整,被分为 Controller 层、Service 层、Repository 层。
Controller 层负责暴露接口给前端调用,Service 层负责核心业务逻辑,Repository 层负责数据读写。而这每一层,我们又会定义相应的VO
(View Object)、BO(Business Object)、Entity。
一般情况下,VO
、BO、Entity 中只会定义数据,不会定义方法,所有操作这些数据的业务逻辑都定义在对应的 Controller 类、Service 类、Repository 类中。这就是典型的面向过程的编程风格。
这种开发模式,叫作基于贫血模型的开发模式。