当前位置:首页 > 每日看点

若依框架真的好用吗有用过若依框架的吗说说感受?

卡卷网1年前 (2024-12-28)每日看点306

若依是一个能用的东西。

仅此而已,远远谈不上好用。

挑几个我实在无法忍受的点来说。

1、ruoyi-vue版的菜单name重名404bug

这个bug是什么意思呢?

如果你有两个二级菜单,aaa--index,bbb --index,不好意思,其中一个会404,因为index重名冲突了。

没看懂?那我拿json结构举个例子。

[{ name: 'Aaa', path: '/aaa', children: [ { name: 'Index', path: '/index' } ]}, { name: 'Bbb', path: '/bbb', children: [ { name: 'Index', path: '/index' } // 这个会404,因为name必须唯一,存在2个Index ]} ]

若依的菜单管理,配置的时候需要你填写的就是一个path,然后它直接取了path加首字母大写作为name。

但在vue-router的组件要求是name必须唯一。

我很好奇,若依在生成路由name的时候,为什么子菜单不能拼接上父级的name?

即变成

[{ name: 'Aaa', path: '/aaa', children: [ { name: 'AaaIndex', path: '/index' } ]}, { name: 'Bbb', path: '/bbb', children: [ { name: 'BbbIndex', path: '/index' } //即子name包含父name,避免name冲突 ]} ]

这个bug这么简单,但是就是没改。issue上不少人都有人提,然后一堆人的回复就是,name不能重复,换一个不重复的path。

2、代码生成器默认模板

我相信学Java的人都听过一堆的的VO、PO、DTO等各种O。
但实际使用上,非常多人喜欢Entity一用到底。
事实上我也觉得简单的项目弄那么多O概念出来就是给自己找麻烦。
但是,我依然觉得,一个CRUD至少要用到2个O。但是请你看下去,大概率不是你平时看到的2个O。

先举个例子吧。
假设有个表,就叫demo吧,对应的类是

public class Demo { private Long id; private String searchField1; // 需要作为搜索条件的字段 private String searchField2; private String searchField3; private LocalDate searchDate1; // 需要做为搜索条件的时间字段 private LocalDate searchDate2; private LocalDate searchDate3; private String field1; // 不需要搜索的字段 private String field2; private String field3; }

常见的错误用法一

生成一个Demo(Entity)外,还另外生成一个DemoVO(也可能叫其他名字)。
但两者字段几乎就是一模一样。
所以实际用的时候也就是各种Bean.copyProperties(source, target) copy来copy去的。
这也是大家往往觉得这些各种各样的O是垃圾的主要原因。

常见的错误用法二

若依里就是这样。
默认生成的controller里CRUD都是用一个Entity从头用到尾。

public class DemoController { public TableDataInfo list(Demo demo); // 其他方法没错,就错在list方法的请求参数不该用User public AjaxResult getById(Long id); public AjaxResult add(Demo demo); public AjaxResult update(Demo demo); public AjaxResult delete(Long id); }

其他方法都没错,增删改都是围绕着Entity来做的,直接用Entity多省事。
但是,list是例外。list的返回可以返回Entity,但是查询参数绝对应该独立一个QueryParam对象。

回头看我前面列出的Demo对象,为什么我要刻意强调 searchField、normalField 呀?
因为一个表那么多字段,不是所有字段都需要作为搜索条件的。

若依框架真的好用吗有用过若依框架的吗说说感受?  第1张

若依自己也是知道的,所以代码生成器可以让你选择哪些要作为查询条件。
再来看时间相关的查询条件,这是用between最多的。
Entity上时间是一个字段,但是查询的时候很多时候传的是一个date range。
这就不对应了呀。怎么办呢?
若依的做法就是用Map params,每个Entity内都嵌入了一个Map params。

其实我觉得,在这里引入一个QueryParam是最好的。
勾选了哪些字段需要用来做查询条件,就专门把这些字段生成一个QueryParam。
这就是我开头说的2个O,Entity和QueryParam。

我的观点

1、生成2个字段一模一样的Entity和VO,copy来copy去,是很蠢的。
2、list用Entity来做查询条件,也是很蠢的。

我的建议

1、如果你的entity和各种O大差不差,就别折腾了,一个Entity就够,别要各种O了
2、专门生成一个QueryParam给list做查询参数用。

我推荐的Controller

public class DemoController{ public TableDataInfo<Demo> list(DemoQueryParam queryParam); // 参数用queryParam,返回用Entity public R<Demo> getById(Long id); public R<Void> add(Demo demo); public R<Void> update(Demo demo); public R<Void> delete(Long id); // 不在意返回结果的话,可以用Void,return R.ok(null)即可 }

3、超喜欢用Map

前面的代码也给出若依的默认代码了,超喜欢在各种地方用Map。

比如Controller里接口的数据接收用Map(我指的是BaseEntity里有一个Map params),返回用AjaxResult?

我实在搞不懂,为什么是用AjaxResult,这样swagger文档还有什么意义?

根本出不来返回报文的结构呀。

4、项目应该SDK化

市面上大多数若依这样的项目,大家的使用方式就是把若依的项目clone下来,然后自己开多一个module,甚至直接在ruoyi-admin模块里继续加自己的业务代码。

这样的做法,坏处非常明显。

1、很难(甚至无法)继续同步若依的更新。

2、在自己的业务项目代码仓库里掺杂着大多自己本不需要关注的框架源代码

3、我相信很多人在公司里都不只负责一个项目,这样就把若依相同的源代码拷贝了好几次

试想一下,你使用springboot的时候,不是引入dependencies,而是直接把springboot的源代码放到项目里,这画面美不美?

所以我很好奇,若依(不仅仅是若依,应该说国内这一类项目都是如此)为什么不把项目sdk化,这样大家都可以建一个几乎空白的项目,然后引入若依的dependencies,就可以只关注自己的业务代码了。

我们现在就是这样,把若依的源代码打包jar后deploy到私有的nexus。

想魔改就魔改,以后要同步更新若依也很方便。

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2024/12/5829.html

分享给朋友:

相关文章

现在做抖音的话,还有机会嘛?

现在做抖音的话,还有机会嘛?

之前我问过小杨哥一个问题:“现在抖音还好做吗?” 疯狂小杨哥在抖音已经突破1亿粉丝,直播间10w的在线观看人数,日常带货随便一场也是上7位数的数据。 现在抖音的市场好像已经被头部占领,资源靠前,普通人似乎已经没有机会了? 下面是小杨哥对于做…

4499 元起的荣耀Magic7 系列实际使用体验怎么样,值得入手吗?

全是软文。。。。。。不过我买了,标准版。为什么买荣耀:屏幕看着舒服,玩游戏选择大屏,超声波指纹解锁。其它,系统、续航、充电、拍照,不是最强,但均衡下来短板都不是很短。其它米OV,IQ、一加,都看了,预算有限,米OV的小屏不感兴趣,OPPO硬…

大量刷短视频,会让大脑变笨拙吗?

会。 我曾经是一名高三学生,亲身实践过。 当时集中突破语文,每天都在刷语文卷。然后有一天想躺一下刷手机,结果短视频刷完了,我再去看哪些文章,只觉头晕眼花,难以理解文字。不过好在这种情况是短时间的,过了一天我的能力又恢复了。 在我看来,长期刷…

我爸讽刺我,写个破代码一年才十几万,他在工地带50个人,让我回去跟他干,写代码没出路,我该怎么选择?

我跟你一样的情况,本人现身说法,千万不要跟你爸干,我就是反面教材,现在想回去都回不去了,快十年没写代码了,再就是岁数大了,38岁了,35岁以上的码农根本就没公司愿意要,而且会受歧视。 工程不好干,首先就是不合法,在法律层面,根本就没有包工头…

台积电通知其中国客户,从下周开始,所有 7nm 及以下芯片出货将停止。如何看待这一行为?

台积电通知其中国客户,从下周开始,所有 7nm 及以下芯片出货将停止。如何看待这一行为?

我说美国快要没招了,你信么? 这次台积电宣布停止向中国大陆客户供应7纳米及更先进AI芯片,再加上前段时间台积电对华为的制裁,我们基本可以认为,台积电在高端芯片领域,已经彻底把大陆给拉黑了,这也意味着中美芯片战已经到了最关键的时刻,一旦我们克…

如何判断 Java 工程师的基础知识是否扎实?

我来给你出几道大题,能答对70%,你就算基础扎实了。 第一部分 Java基础(27)1. 程序本质:代码是如何被执行的?CPU、操作系统、虚拟机各司何职?2. 基础语法:从CPU角度看变量、数组、类型、运算、跳转、函数等语法3. 引用类型:…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。