IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 浅谈Java项目中要不要使用实体类 -> 正文阅读

[Java知识库]浅谈Java项目中要不要使用实体类

问题背景:
??经过在学校的努力学习,2021届菜鸟毕业喽。终于踏上了接受社会毒打的历程,毕业后入职第一家公司,欢天喜地的打开项目准备写下毕业后的第一套增删改查,然后emmmmmmm
??公司的项目中,并没有在学校写项目时经常使用的实体类,而是统一采用List<Map<String,Object>>这种形式来传递参数,而且也没有使用mybatis,这让我一个刚进入代码界的初级开发显得有点手足无措。好在公司技术大佬给力,对新人也关注到位,给予了充分的时间学习并使用这种开发方式。

	随着增删改查的日益熟练,也引发了我对这种开发方式的深思:

Java项目中,到底要不要用实体类,用的好处是什么?

??首先想一下,我们为什么要用实体类?
??我想了想,似乎当初在学校学的就是这样,老师规定:一个实体类对应一个表,方便接收参数,参数检验也方便。规范如此,我也就学到了这个。现在想想,当初竟然没有反问老师一句:为什么把这种开发方式当作规范。
??直到现在,我去问别人,为什么把建实体类当作规范,不写实体类就是不规范的写法,多数人给我的回答基本上都是:
??“因为……因为……我的老师就是这么教我的。
??“那为什么你老师认为这样做是规范?”
??“因为……因为……是我老师的老师这样教他的。”
??后来,通过各种途径学习,我了解到,写实体类其实是为面向对象这个思想服务的,大型项目中,领域建模是必须的,一系列实体构成对一个领域模型的描述和实现,,建模的最直接体现就是实体类,领域和数据库表不一定一一对应,它是对现实生活中的业务逻辑的翻译,你能很好的建模,你的项目可扩展性和维护性就越好,也就是所谓的面向对象编程。

??实体类就是一个拥有Set和Get方法的类。实体类通常总是和数据库之类的(所谓持久层数据)联系在一起。这种联系是借由框架(如Hibernate、mybatis)来建立的。
??实体类的定义:
??实体类主要是作为数据管理和业务逻辑处理层面上存在的类别; 它们主要在分析阶段区分 实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行为必须与它所代表的实体对象密切相关

这段话看起来不太好懂,应该结合实体类的作用来看:
实体类的作用(需要面向对象的一点很基本的知识):
实体类就是一个载体。
现在的设计差不多都是一张表就等于业务里面的一个类。一条记录(一般一行数据)是一个对象,一行中的一列就是这个对象的一个属性。
所以我们在操作某个表时(比如更改这个表的信息),我们就可以在前台定义一个这样的对象,然后将其对应的属性赋值,然后传到后台。
这样后台就可以拿到这个对象的所有值了——不用一个一个属性当参数传过来,只要传一个这个类的对象就好了,也就是说只要一个参数就好了。好处不言而喻。
而这种前台对象到后台数据库的联系,我们是借由框架、配置文件来配置实现的,很方便快捷。并不需要自己手动编程实现。
简而言之,(大多数情况下)实体类就是数据库在Java代码中对应的东东。

??有了实体类,可以更方便的控制属性的读写(有只读 只写 和 读写)并且可以控制写的值是否合法(在set的时候进行判断赋值)以达到对数据操作的有效及安全,其次是为了让你的程序更方便的调用及操作(你可以将类实例后存在集合内)。
??通过以上的讨论,大致可以总结出用实体类的好处:
1. 参数清晰
2. 校验方便
3. 遵从面向对象思想

再多的暂时还没总结出来

??那如果没了实体类,也不用现在流行的mybatis框架,使用List<Map<String,Object>>这种方式传参呢?
??在学校时一直用java,实体类必写,即使是很小的一个宿舍管理系统也要强行封装一层,用实体类CRUD。现在在公司里,越来越感觉到不用的好处。
??首先直接明了的就是,代码写起来更加迅速且简洁了,开发效率真的奇高!
?? java中普遍使用的controller->service->dao->entity的分层方式, 也就是贫血模型

贫血模型,就是一个对象里只有属性,如java中的pojo,不包含业务代码

??贫血模型很貌似很经典, 但是写起来很啰嗦, 如果结合mybatis之类的, 多加几个mapper层, 实现就变得很复杂. 同时业务逻辑多起来后, 代码会爆炸.
??公司的这种无实体类,也没mapper层,自己封装了一套sql工具类的方式,将代码极大程度的简化了,我一直认同:大部分情况下,代码越少,越容易维护。我把你原来一二十行,分散到五六个类中的代码,简化到了两行代码搞定,就是这两行代码写的再复杂,读懂它能有多难?总比你原来五六个类来回跳容易多了吧?况且,这两行代码也根本就不复杂,反观你那一二十行代码,各种取值转换,各种循环嵌套。至于拿规范说事的人,一般都是菜鸡,不信你问他一句,为什么写实体类就是规范?不写实体类就不是规范?他大概率回答不上来。
??另外呢,我公司的业务比较复杂,需求经常来回转变,一个需求可能过个几天你都不认识它,不停的变需求意味着你要不停的改变代码,你就得不停的改变Map,接收Map的类也要不停的变,因为你map的key在不停的变,这时候如果你采用的实体类的方式,代码反而不好维护,还不如用List<Map<String,Object>>动态的获取参数来的方便。
??不过,对于开发人员是简便了,但从整个软件的参与人员来说,像客户(或有些BA、产品经理)这些不懂map list这类计算机概念的,沟通起来及其不顺畅。
??总的来说,经过两种开发方式的深度体验后,不适用实体类的方式在我看来有以下几个好处:
1. 开发方便
2. 代码简洁
3. 约束少,好扩展
4. 容易维护

??不过不用实体类也就要求了开发人员需要对表结构非常熟悉,对业务对象非常熟悉,由于Map里面,key是当变量名来用的,记得有次key敲错了,找半天,浪费了大量的时间。所以,使用这种方式也就要求了开发人员要对业务非常熟悉,熟悉业务也能更加方便的理清思路嘛。程序员不是机器,有现实可行的逻辑,才能写出流畅错误少的代码,模型与业务概念一一对应,理解起来快,写起来也快。
??另外,一个大型项目中这两种方式多多少少都会有,没有孰好孰坏,各有各的适用范围。
??用与不用,也是需要根据项目实际情况来决定,没有所谓的规范,走的人多了,便有了路,树之所以为树,是因为人叫它树,我们只是在尽可能统一树的概念而已。
??最后,送给大家一句在思考这个问题过程中看到的话:软件的生命周期不只是开发

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 12:56:41  更:2022-02-16 12:57:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:50:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码