当前位置: 首页 > news >正文

代码规范性思考

表命名和设计

业务模块前缀;下划线分隔,体现业务含义;数据库字符集、字段名、类型、长度、默认值;一对一、一对多、多对多建表;注释清晰;良好的索引;

接口文档

swagger增强工具swagger-bootstrap-ui、Knife4j

通用出入参包装类

RestRequest<T>、RestResponse<T>

入参校验

@Validated注解、分组校验(如果文档严格,可使用不同BO,分组则用不上),可以使用通用嵌套即接口来做分组。

通用BO

详情和删除、批量删除等可采用通用BO,如IdBO、BatchIdBO。同个业务的新增、修改接口字段无变化可使用Upsert。

代码分层架构

基本都是api、common、client、service、business

全局异常及断言

采用全局异常+断言公共类可避免大量if/else和return,提高代码简洁性

公共类

公共类需要规范、审查,并通知到开发人员

关联数据完整性校验

配置后产生关联的关联数据,在入参时与配置做对比,提系统安全和健壮性。

删除再插入还是区分新增、更新、删除

各有优缺点,个人偏向于后面这种,好处是大部分业务数据是逻辑删除,且业务配置逐渐稳定,一个简单的修改要重新生成所有数据得不偿失,此外还有个好处是更新可控制到字段级别粒度,通过对比新旧字段值来控制是否更新数据。有利于减少数据量和数据库交互次数。

用户信息网关统一赋值

在请求头中设置用户数据

领域模型之核心业务层以及VO、DTO

核心业务层理解不够,不作描述。VO好处在于接口文档更清晰和精细数据返回、DTO数据库交互返回,常常替代VO。

实体模型转换

建议使用MapStruct,自动生成转换器,类似手动赋值,无需反射,减少性能损耗

自定义sql还是在业务实现(持久层框架增强工具)

关联表多,可以拿到主体分页数据后再到业务层去查询关联数据赋值。

公共字段赋值方案

有些框架自带,如mybatis-plus。如果使用tk-mybatis这种,要自己到mybais拦截器中实现

出参文档

如果严格的化,每个接口返回定义一个VO或DTO

代码扫描

感觉Alibaba Java Coding Guidelines挺好

缓存

看业务,一般不经常变动的配置类数据容易做缓存

分布式锁

重要操作的接口加上

接口调试及自测

swagge增强UI中自带,都是不完整。复杂点用postman

联调

热部署插件如Jrebel,偶尔出现奇怪的代码异常报错问题

相关文章:

  • 硬件开发笔记(十八):核心板与底板之间的连接方式介绍说明:板对板连接器
  • 微服务feign组件学习
  • 嵌入式技术学习——c51单片机——蜂鸣器
  • Android开发系列(三)Jetpack Compose 之TextField
  • 泛微开发修炼之旅--20关于Ecology中如何查询正文文件的物理文件,并修改正文中的内容的解决方案
  • Chromium 开发指南2024 Mac篇-Xcode安装(二)
  • 【PyQt5】一文向您详细介绍 self.setLayout() 的作用
  • python pandas处理股票量化数据:笔记1
  • 充电学习—7、BC1.2 PD协议
  • CHATGPT说这个运算放大器是比较器,我说这是运放典型的同相比例放大器,一个光控电路分析
  • 关于lamda表达式的使用
  • gitlab2024最新版安装
  • pip导出格式错乱问题
  • 12寸晶圆厂AGV和天车对网络建设的一些要点
  • 【LeetCode 128】 最长连续子序列
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • C++类中的特殊成员函数
  • ES10 特性的完整指南
  • Javascript基础之Array数组API
  • js正则,这点儿就够用了
  • laravel5.5 视图共享数据
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • webpack4 一点通
  • 当SetTimeout遇到了字符串
  • 记一次和乔布斯合作最难忘的经历
  • 简析gRPC client 连接管理
  • 理清楚Vue的结构
  • 扑朔迷离的属性和特性【彻底弄清】
  • 前端面试之CSS3新特性
  • 如何进阶一名有竞争力的程序员?
  • 通信类
  • 微服务框架lagom
  • 转载:[译] 内容加速黑科技趣谈
  • 回归生活:清理微信公众号
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (1)Nginx简介和安装教程
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (办公)springboot配置aop处理请求.
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二十四)Flask之flask-session组件
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一一四)第九章编程练习
  • (转)原始图像数据和PDF中的图像数据
  • **python多态
  • .apk 成为历史!
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET Core 和 .NET Framework 中的 MEF2
  • .Net环境下的缓存技术介绍