栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【设计模式之旅】06|哪些代码设计看似是面向对象,实际是面向过程的?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【设计模式之旅】06|哪些代码设计看似是面向对象,实际是面向过程的?

前言:我们常见到的编程范式或者编程风格有三种,面向过程、面向对象、函数式,其中面向对象是主流的编程范式。在从事使用面向对象语言开发过程中,你写的代码到底是不是面向对象的呢?下面我们具体聊聊。

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

1.滥用getter、setter方法

在之前的项目开发过程中,小编经常看到,有同事定义完类属性之后,就顺手把这些属性的getter、setter方法都定义上。还有些同事更加省事,直接食用ide或loombok(java)自动生成 各属性的getter、setter方法。实际上这种做法是非常不推荐的。它违反了面向对象的封装特性,实际上是将面形对象退化成面向过程了。在设计实现类的时候,除非我们真的需要,否则,尽量不要给这些属性定义setter方法。除此之外尽管getter相对于setter安全些,但是如何是返回的类似集合类引用对象,也要防范数据被秀给的风险。

2.滥用全局变量和全局方法

在面向对象编程中,常见的全局变量有单例类、静态成员变量、常量等,常见的全局方法有静态方法。单例类对象在全局代码中只有一份,所以,它相当于一个全局变量。静态成员变量归属于类上的数据,被所有实例化的对象所共享,也相当于一定程度上的全局变量。而常量更是一种非常常见的全局变量。静态方法一般用来操作静态变量或者外部数据。你可以联想下我们常用的各种utils类,里面的方法一般都会定义成静态方法,可以在不用创建对象的情况下,直接拿来使用。静态方法将方法与数据分离,破坏了封装特性,是典型的面向过程风格。

3.定义数据和方法分离的类

我们再来看一看面向对象编程中,常见的面向过程的风格。那就是,数据定义在一个类中,方法定义在另一个类中。你可能觉着,这么明显的面向过程的代码谁会这么写呢?实际上,如果你是基于MVC三层结构做web层面的后端开发,这样的代码你可能天天都在写。

传统的MVC结构分为model层、controller层、view视图层。不过在前后端分离之后,三层结构在后端开发中,会稍微有些调整,被分为controller层、service层、repository层。controller层负责暴露接口,service层负责核心业务逻辑,repository层负责数据读写。而每一层中都会定义VO、BO、Entity。一般来说VO、BO、Entity中只会定义数据,不会定义方法,所有操作数据的逻辑都在对应controller类、service类、repository类中。这就是典型的面向过程的编程风格。

实际上,这种开发模式叫做基于贫血模型的开发模式,也是我们比较常用的一种开发模式。至于为什么会这样,我们会面会聊。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/727782.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号