优雅开源框架中的类名与函数名命名前后缀总结

优雅开源框架中的类名与函数名命名前后缀总结

主流开源框架的命名并非随意,而是围绕职责可读性、设计模式、生命周期、约定俗成形成的体系。本文按类名、函数名、跨语言习惯分类整理,便于在设计与评审时快速查阅。


一、类名 / 类型名常见前后缀

1. 设计模式与结构角色

前后缀 含义 典型示例
Abstract* 抽象基类,定义骨架 Spring AbstractApplicationContext
Base* 可复用基类 Django BaseCommand
Default* 默认实现 Netty DefaultChannelPipeline
*Impl / *Implementation 接口的具体实现 Java ArrayList 常配套 List 接口
*Builder 构建器模式 OkHttp Request.Builder
*Factory 工厂创建对象 Spring BeanFactory
*Adapter 适配器,桥接不同接口 Android ArrayAdapter
*Wrapper / *Delegate 包装/委托,增强或代理 Guava ForwardingList
*Proxy 动态代理 JDK Proxy
*Strategy 策略模式(有时显式命名) 各类 *CompressionStrategy
*Template 模板方法模式 Spring JdbcTemplate

2. 职责与分层

前后缀 含义 典型示例
*Service 业务逻辑层 Spring @Service
*Repository / *Dao 数据访问层 Spring Data UserRepository
*Controller / *Handler 请求入口/处理 Spring MVC UserController
*Manager 资源或状态管理 Android FragmentManager
*Provider 提供某类能力/数据 Spring Security AuthenticationProvider
*Resolver 解析/裁决 Spring HandlerMethodArgumentResolver
*Registry 注册中心/注册表 Spring BeanDefinitionRegistry
*Store / *Cache 存储/缓存 Redux createStore
*Context 运行时上下文 Spring ApplicationContext
*Config / *Configuration / *Properties 配置相关 Spring Boot *AutoConfiguration
*Module 功能模块单元 NestJS UserModule
*Component 可组合单元 React MyComponent

3. 横切关注点

前后缀 含义 典型示例
*Filter 过滤链中的一环 Servlet Filter
*Interceptor 拦截器 MyBatis Interceptor
*Middleware 中间件 Express/Koa middleware
*Aspect 切面 Spring AOP
*Listener / *Observer 事件监听 Java ActionListener
*Subscriber / *Publisher 发布订阅 RxJava
*Validator 校验器 Hibernate Validator
*Converter / *Mapper / *Transformer 类型/结构转换 MapStruct UserMapper
*Serializer / *Deserializer 序列化 Jackson JsonSerializer
*Encoder / *Decoder 编解码 Netty codec

4. 网络与 I/O

前后缀 含义 典型示例
*Client / *Server 客户端/服务端 gRPC *Stub / *Service
*Connection / *Session 连接/会话 JDBC Connection
*Channel / *Pipeline 通道/处理链 Netty
*Protocol 协议定义 HTTP/2
*Request / *Response 请求/响应模型 几乎所有 Web 框架

5. 异常、工具、常量

前后缀 含义 典型示例
*Exception / *Error 异常类型 IllegalArgumentException
*Utils / *Helper / *Kit 无状态工具类 Apache StringUtils
*Constants 常量集合 HttpStatusConstants

6. 接口命名习惯(语言差异)

习惯 语言/生态 示例
I* 前缀 C#、部分老 Java/C++ IEnumerable
I 前缀,*able 形容词接口 Java 现代风格 Runnable, Serializable
动词或名词,靠语义区分 Go、Rust io.Reader, Iterator trait

二、函数 / 方法名常见前后缀

1. 访问器(JavaBean / 通用约定)

前缀 含义 示例
get* 获取属性 getName()
set* 设置属性 setTimeout()
is* / has* / can* 布尔判断 isEmpty(), hasNext(), canRead()
should* 条件性判断(偏策略) shouldRetry()

2. 生命周期

前缀 含义 示例
init* / setup* / configure* 初始化 init(), configure()
start* / stop* / pause* / resume* 启停控制 startServer()
destroy* / dispose* / close* / shutdown* / cleanup* 释放资源 close(), shutdown()
reset* 重置状态 reset()
refresh* / reload* 刷新/重载 refreshContext()

3. 数据操作(CRUD 与查询)

前缀 含义 示例
create* / new* / make* / build* 创建对象 createConnection(), build()
find* / query* / fetch* / load* / read* 查询读取 findById(), load()
save* / store* / persist* / insert* / update* 写入更新 save(), persist()
delete* / remove* / drop* / clear* 删除清理 removeListener()
add* / put* / append* 添加元素 addEventListener()
count* / size* / length* 计数 count()

4. 转换与解析

前缀 含义 示例
parse* 字符串/数据 → 对象 parseInt(), parseQuery()
format* 对象 → 字符串 formatDate()
to* 类型转换 toString(), toJSON()
from* 静态工厂式构造 fromString(), Value.from()
serialize* / deserialize* 序列化 serialize()
encode* / decode* 编解码 encodeURIComponent()
convert* / transform* / map* 结构转换 mapToDTO()

5. 处理与执行

前缀 含义 示例
handle* / process* / execute* / run* / invoke* / apply* 执行核心逻辑 handleRequest(), run()
dispatch* / emit* / trigger* / fire* 分发/触发事件 emit('click')
on* 事件回调 onClick(), onMessage()
do* 模板方法中的钩子 Spring doFilter()
try* 尝试执行(可能失败) tryLock(), tryParse()

6. 校验与断言

前缀 含义 示例
validate* / check* / verify* 校验 validateInput()
assert* 断言(测试/调试) assertNotNull()
ensure* / require* 前置条件保证 requireNonNull()

7. 注册与订阅

前缀 含义 示例
register* / unregister* 注册/注销 registerBean()
subscribe* / unsubscribe* / publish* 发布订阅 subscribe()
bind* / unbind* 绑定关系 bindEvents()
attach* / detach* 挂载/卸载 attachShader()

8. 流式 API(Builder / Fluent)

前缀 含义 示例
with* 链式设置 withTimeout(30)
and* / or* 组合条件 Query DSL 中常见
then* 异步链式 Promise .then()

9. 框架扩展点(Spring 等典型)

前后缀 含义 示例
*PostProcessor 后置处理器 BeanPostProcessor
*Aware 注入某能力 ApplicationContextAware
*Registrar 注册扩展 ImportBeanDefinitionRegistrar
*Customizer 定制默认行为 WebMvcConfigurer
*Condition 条件装配 OnClassCondition

三、各生态特有约定

Java / Spring 生态

  • *AutoConfiguration, *Properties, *Template, *Holder
  • 方法after*, before*(生命周期钩子),supports*(能力探测)

JavaScript / TypeScript / React

  • 类/组件*Provider, *Context, *Hook(自定义 hook 常以 use 开头)
  • 函数use*(Hook),create*(工厂,如 createContext),with*(HOC)

Go

  • 接口 :常以 -er 结尾 → Reader, Writer, Handler
  • 函数New* 构造,Must* 失败即 panic,Is* / Has* 判断

Rust

  • Trait :动词或 *ableIterator, Clone, Debug
  • 函数new, with_*, into_*, as_*, try_*, from_*

Python / Django / Flask

  • *Mixin(混入),*View, *Form, *Serializer
  • 函数get_*_or_*, *_url, *_path(Django 路由辅助)

Ruby on Rails

  • *Controller, *Mailer, *Job, *Policy
  • 方法scope :*, before_*, after_*, *_path, *_url

四、优雅命名的核心原则

  1. 名即文档 :看到 *Builder*Handler*Repository 应能猜出职责,无需翻源码。
  2. 前后缀表达角色,中间词表达领域 :如 UserAuthenticationFilter = 用户 + 认证 + 过滤器。
  3. 动词表动作,名词表事物parseJson() 做解析,JsonParser 是解析器类。
  4. 对称命名register / unregistersubscribe / unsubscribeopen / close
  5. 避免空洞词 :少用 ManagerHelperUtil 当万能后缀;能具体就具体(ConnectionPool 优于 ConnectionManager)。
  6. 与语言惯例一致 :Go 用 NewX,Rust 用 from/into,Java 用 get/set,不强行混用。
  7. 框架扩展点要可发现 :Spring 的 *Aware、React 的 use* 形成生态内「看到就懂」的词汇表。

五、速查对照(最常用 Top 20)

类名后缀

Builder, Factory, Handler, Service, Repository, Config, Context, Adapter, Wrapper, Listener, Provider, Filter, Interceptor, Converter, Exception, Client, Controller, Impl, Template, Utils

函数前缀

get/set, is/has/can, create/build, find/load, parse/format, validate/check, handle/process, init/close, register/subscribe, on/to/from, with, try, start/stop


六、命名组合示例

以下示例展示「领域词 + 角色后缀」的常见组合方式:

场景 推荐命名 说明
用户认证拦截 UserAuthenticationInterceptor 领域 + 职责
订单查询服务 OrderQueryService 读写分离时可区分 Query/Command
JSON 解析工具 JsonParser / parseJson() 类用名词,函数用动词
数据库连接池 ConnectionPool 具体优于 ConnectionManager
配置自动装配 RedisAutoConfiguration Spring Boot 惯例
事件监听器 OrderCreatedEventListener 事件名 + Listener
请求参数解析 PageableArgumentResolver Spring MVC 扩展点
链式构建 HttpClient.newBuilder().connectTimeout(...).build() Builder 模式

七、反模式(尽量避免)

反模式 问题 更好做法
DataManager / CommonHelper 职责模糊 UserRepository, DateFormatter
processData() 不知道处理什么 validateOrder(), enrichUserProfile()
doSomething() 无业务语义 用动词 + 领域对象
Utils 类无限膨胀 上帝工具类 按领域拆分 StringUtils, JsonUtils
混用多种语言风格 可读性差 遵循当前语言/框架惯例
IUserService + UserServiceImpl Java 现代项目已较少使用 直接 UserService 接口 + DefaultUserService

文档版本:v1.0 | 适用于架构设计、代码评审、框架扩展开发参考

相关推荐
Gofarlic_OMS3 小时前
NX浮动许可调度黑名单机制,对比两款谁更合理
java·大数据·运维·开源·制造
勤劳X码农6 小时前
2026年AI配音技术选型:从开源TTS到商业API,7款方案横向评测
人工智能·开源
深念Y7 小时前
CC Switch 显示错误模型名的排查与解决
网关·开源·agent·项目·代理
小弥儿7 小时前
GitHub 今日热榜 | 2026-07-24:金融 K 线基础模型上榜
学习·金融·开源·github
腾讯数据架构师8 小时前
CubeStudio 商业版与开源版功能对照:版本选型与人工智能平台采购功能清单
人工智能·开源·mlops·maas·功能清单
我科绝伦(Huanhuan Zhou)9 小时前
智能巡检系统 (Intelligent Inspection System)源代码开源了
开源
明志数科19 小时前
手持式机器人数据采集方案的生态化演进:从开源工具到数据交易
机器人·开源
神奇霸王龙20 小时前
GB/T 46886 闭环屠夫:5 旗舰多模态 LLM 工业质检实测
人工智能·计算机视觉·ai·开源·ai编程·本地部署
冬奇Lab21 小时前
开源项目第165期:superfile — 颜值与效率并重的现代终端文件管理器
开源·资讯