三种违反面向对象编程风格的典型代码设计

Posted utah-lee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三种违反面向对象编程风格的典型代码设计相关的知识,希望对你有一定的参考价值。

1. 滥用 getter、setter 方法

在设计实现类的时候,除非真的需要,否则尽量不要给属性定义 setter 方法。
除此之外,尽管 getter 方法相对 setter 方法要安全些,但是如果返回的是集合容器,那也要防范集合内部数据被修改的风险。

2.Constants 类、Utils 类的设计问题

对于这两种类的设计,我们尽量能做到职责单一,定义一些细化的小类,比如 RedisConstants、FileUtils,而不是定义一个大而全的 Constants 类、Utils 类。
除此之外,如果能将这些类中的属性和方法,划分归并到其他业务类中,那是最好不过的了,能极大地提高类的内聚性和代码的可复用性。

3. 基于贫血模型的开发模式

传统的 MVC 结构分为 Model 层、Controller 层、View 层这三层。不过,在做前后端分离之后,三层结构在后端开发中,会稍微有些调整,被分为 Controller 层、Service 层、Repository 层。
Controller 层负责暴露接口给前端调用,Service 层负责核心业务逻辑,Repository 层负责数据读写。
而在每一层中,我们又会定义相应的 VO(View Object)、BO(Business Object)、Entity。一般情况下,VO、BO、Entity 中只会定义数据,不会定义方法,所有操作这些数据的业务逻辑都定义在对应的 Controller 类、Service 类、Repository 类中。
这就是典型的面向过程的编程风格。

在面向对象编程中,为什么容易写出面向过程风格的代码?

可以联想一下,在生活中,你去完成一个任务,你一般都会思考,应该先做什么、后做什么,如何一步一步地顺序执行一系列操作,最后完成整个任务。
面向过程编程风格恰恰符合人的这种流程化思维方式。而面向对象编程风格正好相反。它是一种自底向上的思考方式。它不是先去按照执行流程来分解任务,而是将任务翻译成一个一个的小的模块(也就是类),设计类之间的交互,最后按照流程将类组装起来,完成整个任务。
除此之外,面向对象编程要比面向过程编程难一些。在面向对象编程中,类的设计还是挺需要技巧,挺需要一定设计经验的。你要去思考如何封装合适的数据和方法到一个类里,如何设计类之间的关系,如何设计类之间的交互等等诸多设计问题。

以上是关于三种违反面向对象编程风格的典型代码设计的主要内容,如果未能解决你的问题,请参考以下文章

原来我们一直写的是违反面向对象编程风格的代码

原来我们一直写的是违反面向对象编程风格的代码

第二十六篇 面向对象初识

浅谈PHP面向对象编程(九设计模式)

设计模式之美——看似面向对象,实则面向过程

面向对象程序设计的总结