前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈Java项目中要不要使用实体类

浅谈Java项目中要不要使用实体类

作者头像
向着百万年薪努力的小赵
发布2022-12-02 10:19:11
7060
发布2022-12-02 10:19:11
举报
文章被收录于专栏:小赵的Java学习

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

代码语言:javascript
复制
	随着增删改查的日益熟练,也引发了我对这种开发方式的深思:

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java项目中,到底要不要用实体类,用的好处是什么?
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档