- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
如
如何搭建一个超级好用的JavaWeb框架?
之前在
之前在Web开辟框架推导一文中我们一步步的搭建了一
个开辟框架。
在当时的情况下,还算满足需求
在当时的情况下,还算满足需求。但是随着项目的逐渐完善,需求变更的频度逐渐变得比新增需求的频度高,原来框架的弊端越来越明显,所以需要对框架进行升级改进。
我们先来看原来框架的问题,然后基于这些问题,来对框架进行改进。
一、原框架的问题:
1.代码生成问题
2.参数传递问题
3.Service层问题
4.测试依赖问题
5.Mapper.xml的问题
代码生成问题
在原框架中,我们基于各种约束,编写了一个代码生成组件,通过这个
组件,我们可以针对选中的表来生成
Controller,Service,Model,Mapper等一系列的类,也就是说,只要建
完表,就可以直接生成一套CRUD,直接就可以启动并测试。这在项目
初期看起来很美,但是在需求变动时,还是有不少的局限性。
首先,生成的代码逻辑是固化的。如果稍微有些调整,就需要调整生成
代码的组件,然后重新打包,上传到jar仓库,项目修改组件版本,再
进行代码生成,整个流程过于繁琐。
其次,为了方便代码的生成,其实是做了不少妥协的:
1.为了方便在修改表字段以后,能够重新生成,不少类都抽象了一个基
类用于操作Model字段。这些基类不能够手动修改,因为每次生成都
会覆盖。这实际导致了类的数量的增多。
2.生成的CRUD固化了,不能手动调整。如果生成的CRUD不满足需
求,不能直接在代码上修改。只能拷贝一份进行修改,因为再次生成时
会覆盖。这导致了代码的冗余。
3.Param和Result委托了Model,这在Model发生改变时,能在编
译期就能知道对应字段的调整。但是也引入了不少问题,我们在「参数
传递问题」一节单独讨论。
参数传递问题
当初为了便于代码的生成,决定Param和Result都继承Model,这
导致了如下的一些问题:
1.使得Param和Result都依赖了Model。但是Param和Result是视
图层模型,而Model是持久层模型,两者的进化度并非一致的。但
是现在的继承关系导致了在默认情况下视图层模型的进化需要和持久
层同步,固然你也可以手动调整Param和Result,但是这又导致了代
码生成的优势没有了。
2.Param和Result通过委托的方式来设置字段,也就是说,它们实际
是没有字段的,通过getter和setter将值设置到了Model中。这就没
法使用lombok来简化getter和setter,使得Param和Result代码
行数较多
3.同时,对于swagger来说,有些注解需要基于字段,导致某些功能
无法实现(例如:ModelAttribute),只能基于额外手段来处理(例如:
需要通过ApiImplicitParams来实现字段文档)。
4.CRUD都是基于同一个Param和Result,导致前端的接口会显示很
多无用的字段,加大前端理解接口的难度
Service层问题
Service层有如下问题:
1.Service层的职责过重,包括了事务处理、参数设置、业务逻辑
2.导致Service中的代码是面条代码,不利于业务逻辑的理解
3.同时事务注解是直接加在类上的,Spring的默认事务机制会导致类似
如下代码的逻辑调用不会抛出期望的异常
//PostService
publicStringsavePost(Postpost){
postRepository.save(post);
for(PostDiscussdiscuss:post.getDiscuss()){
//这里是抓不到RuntimeException异常的,会是一个TransactionRollBack的异常
discussService.save(discuss);
}
}
//discussService
publicStringsavePost(PostDiscussdiscuss){
保存失败
}
测试依赖问题
核心的业务逻辑在Service中,测试还是需要依赖于Spring,当项目越
来越大时,启动项目的时间越来越长,可能要1分钟甚至更长。这就导
致单元测试效率越来越低。
Mapper.xml的问题
在面试的时候,我时常会问下面的一些问题:
1.Java里面接口的作用是什么?
2.Service、DAO为什么要编写接口,再去实现这个接口?
3.接口和实现在相同的模块下,反正都要重新打包
您可能关注的文档
- 【经典范例】电力工程监理有限责任公司固定资产管理办法(WORD22).docx
- 【精品模板】2022年有关建议保护环境的建议书范文六篇.docx
- 【精品】静(动)态光散射仪的工作原理.pdf
- 【精品】测绘减速器的指导书x.docx
- 【精品】幼儿园大班健康教案10篇.docx
- 【管理类】合伙人管理制度与材料.docx
- 【物理】2022年普通高等学校招生全国统一考试模拟测试(一)试卷与答案(广东一模).doc
- 【版】实用的财务工作总结范文集锦六篇.docx
- 【版】2022年幼儿园大班教学反思.docx
- 【热门】学校的教学工作计划汇总7篇.docx
- 第六单元名著导读《钢铁是怎样炼成的》导学导练课件-2023-2024学年统编版语文八年级下册.pptx
- 第十二单元核心素养测评课件-2023-2024学年九年级化学人教版下册.pptx
- 电流与电压和电阻的关系说课(1) --2023-2024学年人教版 九年级物理上学期.pptx
- 第4单元 世界音乐之窗——拉丁美洲音乐 《玛丽安》 课件 2023—2024学年粤教版初中音乐八年级下册 -.pptx
- 第12课 智能预测出行方式 课件 -2023-—2024学年浙教版(2023)初中信息技术九年级全册 .pptx
- 鲁教版初中信息科技《计数循环我在行 》课件.pptx
- 复习-Python初中信息技术.pptx
- 山西省大同市2023-2024学年八年级下学期期中语文试题(含解析).pdf
- 2024届四川省成都市实验外国语学校高三下学期三模物理试题(含答案).pdf
- 2024年广东省广州市第六中学中考一模语文试题(解析版).pdf
文档评论(0)