哪些代码设计看似面向对象,实际上是面向过程的?

431 阅读2分钟

设计与风格

一般来说,面向对象编程都是通过面向对象编程语言来进行的,但是,不用面向对象编程语言,我们照样可以进行面向对象编程;

反过来说,即便我们使用面向对象编程语言,写出来的代码也不一定是面向对象编程风格的,也有可能是面向过程编程风格。

哪些代码设计看似面向对象,实际上是面向过程的?

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 类中。这就是典型的面向过程的编程风格。

这种开发模式,叫作基于贫血模型的开发模式