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

【架构】-----Service 层代码太长太乱?试试这套 “见名知意” 的命名规范!

前言java服务层业务比较复杂导致单个函数行数太多可读性极低怎么解决让函数名本身就清晰告知开发者它的类型、职责、适用场景。以下是可落地的、行业通用的命名规范体系兼顾简洁性和辨识度一、核心命名原则不分类前提下前缀区分类型用固定前缀标识函数类型是最直观的方式优先级高于其他命名规则。动词名词体现职责前缀后紧跟核心动作业务对象明确函数做什么、针对什么业务。统一后缀/修饰符对特殊场景如共用、辅助增加后缀避免歧义。拒绝模糊词汇禁用“doSomething”“handleData”“processInfo”等无意义命名。二、分类型命名规范无物理分类以下是针对不同函数类型的具体命名规则附示例以订单业务为例函数类型命名规则前缀/后缀示例订单业务说明入口函数核心动词 业务对象无特殊前缀无核心动词开头createOrder(OrderDTO dto)queryOrderById(Long id)cancelOrder(String orderNo)入口函数是控制层直接调用的核心函数无特殊前缀用最简洁的核心动词体现业务动作是命名体系的“基础层”。校验函数validate 校验维度 业务对象前缀validatevalidateOrderParam(OrderDTO dto)validateOrderStatus(String orderNo)validateOrderAmount(BigDecimal amount)前缀固定为validate后接“校验维度”参数/状态/金额 业务对象明确校验的具体内容。共用函数核心功能 业务对象 Common后缀后缀CommonformatOrderNoCommon(String no)calculateTaxCommon(BigDecimal amount)convertDateCommon(Date date)后缀固定为Common标识是跨场景共用的通用逻辑无业务上下文依赖可在多个入口函数中复用。辅助函数辅助动作 目标对象 For 场景可选前缀build/parse/assemblebuildOrderDTOForDetail(OrderDO order)parseOrderGoodsFromJson(String json)assembleOrderCondition(OrderQueryDTO query)前缀用build组装、parse解析、assemble拼装等后缀可加For场景如ForDetail/ForList明确辅助的具体场景。抽取函数do 具体操作 业务对象前缀dodoCalculateOrderAmount(OrderDTO dto)doGenerateOrderNo()doUpdateOrderStatus(String orderNo, Integer status)前缀固定为do标识是从复杂业务中拆分的“子逻辑”仅被本类其他函数调用通常设为private不对外暴露。复杂业务函数process 业务场景 业务对象前缀processprocessOrderPay(OrderDTO dto)processOrderRefund(String orderNo, BigDecimal refundAmount)processOrderTimeout(String orderNo)前缀固定为process标识处理核心/复杂业务规则可调用do开头的抽取函数是入口函数的“业务实现层”。三、完整代码示例无物理分类以下是一个不做分类的OrderService示例仅通过命名区分所有函数类型保持代码内聚且可读性强/** * 订单服务无物理分类仅通过命名区分函数类型 * 核心规则入口函数无特殊前缀其他函数通过前缀/后缀标识类型 */ServicepublicclassOrderService{AutowiredprivateOrderMapperorderMapper;// ---------------------- 入口函数控制层直接调用无特殊前缀 ----------------------publicOrderDTOcreateOrder(OrderDTOdto){// 1. 调用校验函数validateOrderParam(dto);// 2. 调用复杂业务函数OrderDOorderDOprocessOrderCreate(dto);// 3. 调用辅助函数OrderDTOresultbuildOrderDTOForDetail(orderDO);returnresult;}publicOrderDTOqueryOrderById(Longid){OrderDOorderDOorderMapper.selectById(id);returnbuildOrderDTOForDetail(orderDO);}// ---------------------- 校验函数前缀validate ----------------------publicvoidvalidateOrderParam(OrderDTOdto){if(dtonull){thrownewBusinessException(PARAM_NULL,订单参数不能为空);}if(StringUtils.isBlank(dto.getOrderNo())){thrownewBusinessException(PARAM_ERROR,订单号不能为空);}}privatevoidvalidateOrderStatus(StringorderNo){OrderDOorderDOorderMapper.selectByOrderNo(orderNo);if(orderDO.getStatus()!0){thrownewBusinessException(STATUS_ERROR,订单非待支付状态无法操作);}}// ---------------------- 复杂业务函数前缀process ----------------------privateOrderDOprocessOrderCreate(OrderDTOdto){// 调用抽取函数BigDecimalamountdoCalculateOrderAmount(dto);StringorderNodoGenerateOrderNo();OrderDOorderDOnewOrderDO();orderDO.setOrderNo(orderNo);orderDO.setAmount(amount);orderDO.setCreateTime(newDate());orderMapper.insert(orderDO);returnorderDO;}// ---------------------- 抽取函数前缀do私有 ----------------------privateBigDecimaldoCalculateOrderAmount(OrderDTOdto){returndto.getGoodsList().stream().map(GoodsDTO::getPrice).reduce(BigDecimal.ZERO,BigDecimal::add);}privateStringdoGenerateOrderNo(){returnORDER_System.currentTimeMillis()RandomUtils.nextInt(1000,9999);}// ---------------------- 辅助函数前缀build/parse ----------------------privateOrderDTObuildOrderDTOForDetail(OrderDOorderDO){OrderDTOdtonewOrderDTO();dto.setOrderNo(orderDO.getOrderNo());dto.setAmount(orderDO.getAmount());// 调用共用函数dto.setCreateTime(formatDateCommon(orderDO.getCreateTime()));returndto;}// ---------------------- 共用函数后缀Common ----------------------privateStringformatDateCommon(Datedate){if(datenull){return;}SimpleDateFormatsdfnewSimpleDateFormat(yyyy-MM-dd HH:mm:ss);returnsdf.format(date);}}四、补充规范无分类场景必加即便仅靠命名区分也需要配套少量规则保证可读性避免命名混乱访问修饰符约束入口函数public对外暴露控制层调用。校验/复杂业务函数public或protected可被同包其他Service复用。抽取/辅助/共用函数private仅本类使用如需跨类复用升级为public并保持命名规则。参数命名约束业务对象参数用业务对象名缩写/全称如OrderDTO dto、Long orderId。基础类型参数加语义前缀如String orderNo而非String no、BigDecimal orderAmount而非BigDecimal amount。注释简化约束因命名已体现类型注释只需说明“业务规则”无需说明“函数类型”。示例/** * 创建订单核心入口 * 业务规则1. 校验参数 2. 计算金额 3. 生成订单号 4. 持久化 * param dto 订单入参 * return 订单详情 */publicOrderDTOcreateOrder(OrderDTOdto){...}五、避坑点无分类命名的关键禁止前缀混用不要把do用在入口函数如doCreateOrder也不要把validate用在业务函数如validateOrderCreate。禁止缩写模糊不要用cOrder代替createOrder不要用vParam代替validateOrderParam缩写仅在团队完全共识的前提下使用如query可简写为qry。禁止函数过长即便命名规范单个函数行数也不能超过50行否则再清晰的命名也无法掩盖逻辑混乱。总结仅靠命名规范区分服务层函数的核心是固定前缀用validate/do/process等前缀标识函数类型入口函数无特殊前缀。语义完整前缀后紧跟“动作业务对象”明确函数职责。特殊后缀用Common标识共用函数用For场景标识辅助函数。修饰符配合通过public/private区分函数是否对外暴露减少调用歧义。这套方案无需拆分类/包适合中小型项目或快速迭代场景既能保证代码可读性新人看函数名就知道类型和用途又能避免过度设计平衡规范和开发效率。

相关文章:

【架构】-----Service 层代码太长太乱?试试这套 “见名知意” 的命名规范!

前言: java服务层业务比较复杂,导致单个函数行数太多,可读性极低,怎么解决?, 让函数名本身就清晰告知开发者:它的类型、职责、适用场景。以下是可落地的、行业通用的命名规范体系,兼…...

Mixture of Experts(MoE)

Mixture of Experts(MoE) 1. 使用背景大模型这几年有一个很明显的趋势:参数越大,能力往往越强。但问题也很直接。传统稠密模型里,参数一旦变大,训练和推理的计算量也会跟着一起涨。也就是说,模型…...

【AI】如何设计Agent的记忆系统?

记忆模块是Agent打破LLM上下文窗口限制、实现持续学习和个性化的关键。 设计Agent的记忆系统可以仿照人类的记忆机制。 分为短期记忆和长期记忆。 1、短期记忆(Short-Term Memory): 作用:存储当前任务的上下文信息,包括即时对话历史、中间的思考步骤、工…...

Flink从入门到上天系列第十九篇:Flink当中的容错机制

一:检查点的概念在流处理中,我们可以用存档读档的思路,就是将之前某个时间点所有的状态保存下来,这份 “存档” 就是我们所谓的 “检查点”(checkpoint)。遇到故障重启的时候,我们可以从检查点中…...

基于Matlab的齿轮-轴-轴承系统非线性动力学模型及其转速混沌特性分析

基于matlab的齿轮-轴-轴承系统的含间隙非线性动力学模型,根据牛顿第二定律,建立齿轮系统啮合的非线性动力学方程,同时也主要应用修正Capone模型的滑动轴承无量纲化雷诺方程,利用这些方程推到公式建模;用MATLAB求解画出…...

AI要干掉老师傅?老马揭秘CV落地真相

《人工智能AI之计算机视觉:从像素到智能》 模块五:未来与生态——多模态、产业与思维升维(认知拓展) 第 18 篇 AI不只是“看图”:老马带你拆解CV重塑三大行业的底层真相 前两天,有个在大型制造企业干了二十多年的老伙计找我喝酒。 几杯酒下肚,他开始大吐苦水:“老马…...

高铁卖票这件事,比你的生产计划做得强多了

获取更多资讯,赶快关注公众号《AI制造新观察》吧! 文章目录你以为退票手续费是在罚你?那你想错了退票手续费演进历程候补购票,根本不是你想的那么简单第一层价值:把虚假需求和真实需求分开第二层价值:实时构…...

西安康德航测 1553B 线缆

西安康德航测 1553B 线缆1553B 线缆产品(M17/176-0002 等效,GJB289A)规格:78Ω、24AWG 镀银、PFA 绝缘、屏蔽双绞线、-55℃~200℃类型:裸线、成品组件(含 TRB 双轴接头)一、技术性能优势&#x…...

三相调速永磁同步电动机maxwell模型 1、案例采用180-8极一字型冲片 2、转速为150...

三相调速永磁同步电动机maxwell模型 1、案例采用180-8极一字型冲片 2、转速为1500转 功率22kW 3、超高效率可达到1级能效 4、提供冲片图纸及Rmxprt路算结果及maxwell模型,可提供2极至8极不同转速及不同功率的电磁方案计算单 提供有限元分析模型,可直接用…...

吉林省GEO营销哪个服务商技术强

在AI搜索时代,GEO(地理定位优化)营销已成为企业提升本地曝光、精准获客的关键手段。吉林省内,吉林省吉品信息科技公司(简称“吉品信息科技”)凭借自主技术、合规优化及全流程服务,成为中小企业数…...

python+Ai技术框架的健身房课程预约管理系统的设计与实现django flask

目录技术选型与框架对比核心功能模块设计数据库设计(Django示例)AI功能实现步骤前后端交互部署与优化测试与迭代项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术选型与框架对…...

GitNexus:零服务器代码知识图谱引擎,让代码理解更智能

GitNexus:零服务器代码知识图谱引擎,让代码理解更智能 今日 GitHub 热门:1,860 stars ⭐ | 当日星增 1,860 | 完全在浏览器中运行 🎯 核心特性 1️⃣ 零服务器架构 GitNexus 的最大亮点是完全在浏览器中运行: ┌──…...

72 编辑距离

题目 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: 输入:word1 “horse”, word2 “ros” 输出&…...

Git CI/CD什么意思

Git CI/CD什么意思 Git CI/CD 是现代软件开发中用于自动化构建、测试和部署代码的核心实践。它通常指的是将 Git(版本控制系统)与 CI/CD(持续集成/持续交付或持续部署)流水线相结合的工作流。 更清晰地理解,我们可以将…...

数据可视化 Amazon QuickSight介绍和使用

第一章:Amazon QuickSight 基础概念1.1 什么是 Amazon QuickSight?Amazon QuickSight 是亚马逊云科技(AWS)提供的一项全托管的、基于云的商业智能(BI)服务。它的核心目标是帮助组织内的任何员工&#xff0c…...

1143. 最长公共子序列-day49

class Solution {public int longestCommonSubsequence(String text1, String text2) {int l1text1.length();int l2text2.length();int[][] dp new int[l11][l21];//dp 前n个最长公共子序列for(int i0;i<l1;i){for(int j0;j<l2;j){//如果用dp[i][j]可以用text1.charAt(i…...

手把手玩转STM32+BQ76940电池管理系统

基于STM32F103主控的MSB管理系统资料 主控芯片STM32F103C8T6&#xff0c;锂电池管理芯片BQ76940。 资料组成&#xff1a;原理图&#xff08;AD打开&#xff0c;无PCB文件&#xff09;&#xff0c;程序源码&#xff0c;上位机软件&#xff0c;bq76940说明文档&#xff0c;bq7694…...

Windows超级管理器:一款功能全面的系统管理工具,可以系统检测、文件清理、隐私保护、磁盘管理、文件粉碎等等实用功能

软件获取地址 Windows超级管理器 Windows超级管理器是一款功能全面的系统管理工具&#xff0c;其功能包括系统检测、文件清理、隐私保护、磁盘管理、文件粉碎等等实用功能。 软件是绿色单文件版&#xff0c;大小仅6.35 MB&#xff0c;非常小巧。软件主界面可以查看你电脑的基…...

AI教育轻创合伙人靠谱吗?机遇与陷阱的深度剖析

随着人工智能技术的飞速发展&#xff0c;AI教育已成为行业新风口&#xff0c;各类轻创合伙人模式应运而生&#xff0c;吸引着众多创业者的目光。然而&#xff0c;面对“AI教育轻创合伙人靠谱吗”这一核心问题&#xff0c;市场观点不一。本文将从行业视角出发&#xff0c;深度解…...

热销榜单:2026年北京本凡科技推荐的最值得的小程序开发平台TOP3,助力企业数字化转型

在数字化转型的背景下&#xff0c;选择一个合适的小程序开发平台至关重要。2026年&#xff0c;北京本凡科技推荐的三大平台&#xff0c;各自以不同的特点和优势支持企业的发展。首先&#xff0c;北京本凡科技凭借其丰富的经验和定制化服务&#xff0c;帮助企业实现个性化需求。…...

违章真的会让车险涨价吗?很多车主都搞错了,看完少花几千块!(违章真的会影响车险保费吗?一文讲清楚交强险和商业险的浮动规则)

文章目录 📖 介绍 📖 📒 违章与车险保费的关系 📒 📝 保费调整的两个板块 📝 交强险浮动规则 🔢 保费优惠情况 📍 重要:地区差异说明 ⚠️ 保费上浮情况 📌 关于普通违章的说明 📝 商业险浮动规则 📌 轻微违章不计入 📌 严重违章可能累加 📌 出险记…...

西门子S7-200Smart测速产量统计程序:实时记录当班与总生产数据及生产时间参数的MCGS...

西门子生产测速产量统计程序。 可以记录当班生产量和生产总量&#xff0c;生产时间参数。 PLC程序是西门子S7-200Smart编写。 触摸屏使用MCGS编写。厂里新上的生产统计系统用了西门子S7-200Smart PLC搭配MCGS触摸屏&#xff0c;这组合在中小型产线里挺常见。今天主要聊聊这个测…...

py列表小练习:成绩统计程序一些数据容器的小练习

编程练习题&#xff1a;学生成绩统计系统题目描述&#xff1a;请编写一个学生成绩统计程序&#xff0c;实现以下功能&#xff1a;循环接收用户输入的学生成绩&#xff08;整数&#xff09;&#xff0c;输入 q 时结束输入&#xff1b;输入过程中如果输入非数字&#xff08;且不是…...

企业内部人才选拔AI工具盘点:洞察未来,激活组织潜能

引言&#xff1a;AI驱动的内部人才选拔新范式在全球经济与产业结构剧烈变革的当下&#xff0c;企业对人才的战略需求日益凸显。内部人才的精准配置与高效发展&#xff0c;已成为企业持续增长的关键。传统人才管理模式在面对内部人才识别、评估与发展时&#xff0c;常受限于信息…...

2026 学术写作效率革命:Paperzz AI 初稿引擎,重构本科 / 硕博论文创作全链路

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 一、开篇&#xff1a;当毕业季遇上智能工具&#xff0c;论文初稿写作迎来全新可能 每年毕业季&#xff0c;数…...

计算机毕业设计之springboot大学生志愿者管理系统

系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对大学生志愿者管理的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”…...

DDoS是什么?遇到后有哪些解决方法?

随着网际网络的发达&#xff0c;DDos攻击手法也变得越来越多元且难以防范&#xff0c;尤其官方网站、线上交易平台、使用者登入页面皆为攻击者之首选目标&#xff0c;DDos攻击让许多厂商与企业蒙上巨大的损失&#xff0c;那究竟有什么DDos防御措施能在遭受攻击事前进行部署与事…...

2026年2月亲测:清洁拖把实践分享

引言&#xff1a;清洁工具升级背后的消费逻辑2026年家居清洁市场正经历一场“效率革命”。行业报告显示&#xff0c;超70%消费者将“免手洗、无死角、抑菌性”列为清洁工具核心需求&#xff0c;传统拖把因操作繁琐、清洁不彻底逐渐被淘汰。作为深耕清洁领域14年的企业&#xff…...

网络安全岗位薪水多少?

网络安全行业薪资一直备受关注&#xff0c;也是很多人入行的重要原因。其薪酬受城市、经验、岗位影响较大&#xff0c;整体高于普通IT岗位&#xff0c;那么网络安全薪水一般多少?以下是具体内容介绍。网络安全岗位的薪水跨度较大&#xff0c;具体区间如下&#xff1a;初级职位…...

【量化工具推荐】2026年期货量化实盘前验证平台排名

一、前言 实盘前用历史数据回测、用模拟盘验证&#xff0c;能降低实盘风险。2026年哪些期货量化平台更适合做实盘前验证&#xff1f;本文从回测与实盘一致性、模拟真实性、验证流程便捷性等维度&#xff0c;对8款期货量化平台进行排名。 注意&#xff1a;本文仅排名期货量化实…...