Java-你还在使用Map来代替实体类作为参数吗?

2023-11-10

1.前言

       刚入职的时候,了解公司框架后发现很多传参(包括前端向后端传参、后端Java封装函数的入参以及调用MyBatis时的入参)的位置,入参的位置都很“协调”,很多地方都是Map形式的参数与函数进行交互。而当时所接受的思想是开发要体现面向对象,要体现封装,但是实际工作时接触到一些项目后发现事实与理论是有所差异的,今天就来说一说我个人对Map和JavaBean作为函数入参时的理解。

2.使用Map作为入参的优缺点

2.1使用Map作为入参的优点

       1.使用Map不需要定义属性以及初始化get、set方法和构造函数,可以简化这些操作部分;

       2.Map的灵活性要高于JavaBean,可以根据不同的封装内容,使用于不用的场景,而这样也就意味着Map的扩展性很强,耦合度更低;

       3.Map可以直接作为IBatis、MyBatis的返回结果,省略了JavaBean作为返回结果时需要将返回字段与实体属性进行关系映射的步骤,可以简化操作;

2.2使用Map作为入参的缺点

       1.使用Map作为入参需要明确维护好每个key参数对应的使用场景及明确描述key的作用等,否则后期需要维护的时候这就是个让你头疼的坑;

       2.对指定key的value值进行加工处理时需要另外封装函数,如果加工处理的函数较多时会显得代码过于散乱;

       3.团队开发时,如果多个人同时需要使用同一个Map时,会出现Map中出现多个不同的key,但是保存的值是相同的,这样会导致代码冗乱,多个业务之间衔接时不方便理解;

       4.如果与IBatis或MyBatis交互作为返回结果时,编译期无法确认参数是否有误,若参数有误需要到sql交互层进行确认;

2.3使用JavaBean作为入参的优点

       1.JavaBean作为入参时,在属性方面和函数两方面都可以良好的体现面向对象和封装的概念。JavaBean的属性方面:JavaBean的属性明确即使多个人同时使用同一个JavaBean,也可以避免本质上相同属性出现多个不同命名的情况;JavaBean的函数方面:当属性需要特殊加工处理时,可以在JavaBean内封装函数处理需要加工的属性,体现了对特定逻辑的封装、包装,方便团队间理解和后期维护;

       2.JavaBean与IBatis或MyBatis进行交互,作为返回结果时,通过配置属性与字段映射关系可以降低JavaBean与sql之间的耦合关系,当sql改动时修改映射关系就可以无需改动对应的JavaBean属性;

       3.JavaBean的一些问题可以在代码编译期排除,而不需要等到运行时才发现错误,可以减少在运行时需要排查的问题点;

2.4使用JavaBean作为入参的缺点

       1.增加大量代码量,需要更多的时间需考虑对JavaBean属性与业务函数的实际封装;

       2.会降低业务程序的开发进度;

       3.当JavaBean属性需要增加时,改动地方要比使用Map的形式时要多一些,要增加JavaBean属性、get/set方法、封装的业务逻辑函数以及JavaBean与sql字段的映射关系等;

3.小结

       1.个人开发项目的情况下,为了提高开发效率和减少代码量的目的可以使用Map的形式开发,对项目来说也是有利的;

       2.团队开发项目的情况下,为了团队间方便理解和减少后期二次开发以及运维的成本,使用JavaBean的形式更有利。

       所以,在实际开发中根据自身实际情况灵活运用,才是王道啊!以上是本人个人观点,若有不对之处,望大家指正,不胜感激!

       最后:全文为纯手打,码字不易,若感觉有所收获记得点个赞呀!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java-你还在使用Map来代替实体类作为参数吗? 的相关文章

随机推荐

  • mysql如何显示ddl_Mysql DDL语句之视图

    Mysql 视图是一个虚拟表 内容由 select 查询语句定义 同真实的表数据一致 但是视图并不在数据库中以存储的数据值形式存在 试图引用自定义查询表的字段 并且在引用试图时动态生成 对其所引用的基础表来说 Mysql 视图的作用类似于筛
  • 【计算机视觉

    文章目录 一 ModaNet 二 SKU110K 三 SceneNet 四 VT5000 五 Washington RGB D 六 Argoverse HD 七 CADC Canadian Adverse Driving Condition
  • 小技巧——宝塔面板重启、重置命令

    1 Centos 安装脚本 yum install y wget wget O install sh http download bt cn install install sh sh install sh 2 Ubuntu Deepin
  • Qt示例5:用Qt画一个漂亮预警仪表

    以下是用Qt实现漂亮预警仪表的步骤和代码 创建一个Qt项目 并添加一个主窗口 在主窗口中添加QGraphicsView控件 用于绘制预警仪表 创建一个QGraphicsScene对象 并将其设置为QGraphicsView的场景 QGrap
  • emmx用xmind打开_XMind思维导图:专注扩展延伸和梳理,让你事半功倍!

    更多精彩软件 请关注我们 今日新闻 现如今 思维导图被普遍运用在各行各业 充当着重要的角色 但你会发现这些导图绝大多数是通过电脑软件绘制的 随着移动互联网的高速发展 实际情况告诉我们需要一款手机版的思维导图软件 便于我们在手机上就能自由整理
  • mmdetection踩坑1~docker内RuntimeError: DataLoader worker (pid 1727) is killed by signal: Bus errer

    今天在docker内使用mmdetection做训练时 workers per gpu参数设置为0时 可以正常训练 但修改配置文件中workers per gpu 2参数后 开始训练 程序报错 网上查资料显示 是因为docker的共享内存不
  • 初始化列表

    在构造函数后面 属性 值 参数 属性 值 参数 define CRT SECURE ND WARNINGS include
  • 1.4最流行的NoSQL——Redis

    本文比较重要的概念 NoSQL 及它的优点 Redis 及它的优点 NoSQL Not Only SQL NoSQL 在互联网中作用很大 可以在很大程度上提高互联网系统的性能 具备一定持久层的功能 也可以作为一种缓存工具 注释 Redis缓
  • 重学JavaScript 第二天

    数据类型 js数据类型整体分为两大类 1 基本数据类型 2 引用数据类型 1 数据类型 数字类型 number JavaScript 中的正数 负数 小数等 统一称为 数字类型 注意 JS 是弱数据类型 变量到底属于那种类型 只有赋值之后
  • 【排序算法】快速排序(C语言)

    排序算法 快速排序 目录 一 快速排序的单趟排序 1 霍尔法 2 挖坑法 3 前后指针 二 快速排序 1 排序步骤 2 排序完整步骤图 3 快速排序代码 3 1 递归实现 3 2 非递归实现 三 选择基准数key 1 为什么要选择基准数ke
  • 互联网精准广告定向技术: 一切你该了解的知识总结与整理

    互动中国编者前言 本文来自于读者的投稿 牛国柱博客 原文作者为资深互联网广告行业从业者 经过一段长时间的积累 从基础知识 技术应用以及在线广告作弊手段整理和反作弊方法三大角度 共计15篇系列专文 对于精准广告定向技术的介绍进行了一个全面且切
  • MATLAB2016添加工具箱toolbox方法,有截图

    我这里添加的是Image Graphs 下载路径 需要注册账号 https ww2 mathworks cn matlabcentral fileexchange 53614 image graphs requestedDomain zh
  • Linux-Bridge(LBR)网络虚拟化实战

    1 Linux 网络虚拟化概述 1 网络通信模型 Linux 系统的网络通信模型 即信息是如何从程序中发出 通过网络传输 再被另一个程序接收到的 整体上看 Linux 系统的通信过程无论按理论上的 OSI 七层模型 还是以实际上的 TCP
  • Java 三大特性学习笔记(基础)

    目录 约定俗成的运算符 铺垫 1 逻辑运算中的 和 和 一个符号 和两个符号 的区别是 2 位 bit 运算中的 和 第一个特性 封装性 封装修饰符介绍 以下封装等级由低写到高 1 public 公开等级 相当于没有封装 2 protect
  • 南方科技大学计算机系师资,于仕琪 - 教师个人主页 - 南方科技大学

    Rijun Liao Shiqi Yu Weizhi An Yongzhen Huang A model based gait recognition method with body pose and human prior knowle
  • 【Java编程】SSH:Struts、Spring、Hibernate

    SSH Struts Spring Hibernate SSH 框架指的是 Struts Spring 和 Hibernate 三者的集成 集成 SSH 框架的系统从职责上分为表示层 业务逻辑层 数据持久层和域模块层 Struts 属于 M
  • ChatGPT数据分析及作图插件推荐-Code Interpreter

    今天打开chatGPT时发现一个重磅更新 code interpreter插件可以使用了 去查看openai官网 发现从2023 7 6号 前天 开始 code interpreter插件已经面向所有chatGPT plus用户开放了 为什
  • 千辛万苦拿到阿里内推却挂了,重拾起鼓三面字节跳动成功收到字节offer(社招四面面经总结)

    前言 先说说结果吧 阿里挂了 和很多小伙伴一样 我也是挂在阿里的HR手里了 阿里的HR是真的恐怖 希望将来要面阿里的小伙伴们 千万要当心HR面 不过 就像我们一个老师说的 有时候真的要看缘分 可能我和阿里 真的是缘分未到吧 不过周五晚上 收
  • 《代码大全2》第8章 防御式编程

    目录 前言 8 1 保护程序免遭非法输入数据的破坏 8 1 1 三种方式处理 垃圾进 8 2 2 思考 程序输出时也应该增加防御 8 2 3 保留 证据 8 2 断言 8 2 1 建立自己的断言机制 8 2 2 使用断言的指导建议 8 3
  • Java-你还在使用Map来代替实体类作为参数吗?

    1 前言 刚入职的时候 了解公司框架后发现很多传参 包括前端向后端传参 后端Java封装函数的入参以及调用MyBatis时的入参 的位置 入参的位置都很 协调 很多地方都是Map形式的参数与函数进行交互 而当时所接受的思想是开发要体现面向对