多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

AWS SDK for Java v2 命名约定指南:类名与测试命名的完整规范

AWS SDK for Java v2 命名约定指南:类名与测试命名的完整规范 AWS SDK for Java v2 命名约定指南类名与测试命名的完整规范【免费下载链接】aws-sdk-java-v2The official AWS SDK for Java - Version 2项目地址: https://gitcode.com/GitHub_Trending/aw/aws-sdk-java-v2本文是 AWS SDK for Java v2 官方开发指南NamingConventions.md的深度解读。它为 SDK 贡献者、代码生成器维护者以及基于 SDK 二次开发的团队提供了一套统一、可判定的命名规范从单数类名缩略词按单词处理等通用规则到Supplier/Provider/Factory的区分再到服务客户端Client/AsyncClient/EnhancedClient/Manager/Presigner/Utilities的完整决策树以及测试方法名的methodToTest_when_expectedBehavior约定。读完本文你将掌握这套命名体系的判定逻辑并能对照仓库源码理解每个命名后缀背后的职责划分从而在阅读、审查或扩写 SDK 代码时一眼判断一个类的角色。一、为什么 SDK 需要一套命名约定AWS SDK for Java v2 是一个拥有数百个模块、数千个类的巨型工程核心基础设施位于core/服务客户端分布在services/与services-custom/。其中绝大多数类由代码生成器见 codegen 目录根据服务模型自动产出另有大量手写类承担协议解析、认证、缓存、增强 API 等职责。在没有统一规范的情况下DynamoDBClient与DynamoDbClient这类仅差大小写的命名会引发长期混乱——前者把缩写当成整体词后者把缩写展开为驼峰单词二者在搜索、文档、IDE 补全和代码审查中都会造成歧义。因此官方在docs/guidelines/下制定了若干开发准则NamingConventions.md 就是其中专门约束名词与通用术语如何进入类名、方法名的一份规范。它的核心思想是命名应当是机械可判定的——给定类的职责描述就能推出其名称反之给定一个名称就能推出其职责。二、类命名通用规则2.1 优先使用单数类名Prefer singular class names:SdkSystemSetting, notSdkSystemSettings.规范要求类名优先使用单数形式。理由很直接一个类描述的是一件事物的类型而不是一组事物的集合集合通常由List、Set或迭代器承载而不是靠类名复数化来表达。仓库中的实例 SdkSystemSetting.java 正体现了这一点它定义的是单个系统属性设置项这一抽象枚举或接口用于读取AWS_ACCESS_KEY_ID等环境变量/系统属性因此命名为SdkSystemSetting单数而非SdkSystemSettings复数。2.2 缩略词按单个单词处理Treat acronyms as a single word:DynamoDbClient, notDynamoDBClient.对于DynamoDB、SQS、IAM这类缩略词规范要求把它们当作一个普通单词来参与驼峰拼接只有首字母大写DynamoDbClient、SqsBatchManager。不要写成全大写的DynamoDBClient。这一点对代码生成器尤其重要服务模型中的DynamoDB、S3、CloudWatch等缩写会被统一规整为DynamoDb、S3保留首字母缩写、CloudWatch形式确保跨服务的客户端命名风格一致。读者在检索服务客户端时也应习惯使用DynamoDbClient、S3Presigner、SqsAsyncBatchManager这类拼写。三、实例化其他类的类命名Supplier / Provider / Factory当一个类的主要职责是返回另一个类的实例时命名后缀取决于其获取方法的形态。规范给出了如下判定树判定条件命名后缀仓库实例get 方法无参数且类实现了SupplierT{Noun}SupplierCachedSupplier见 CachedSupplier.javaget 方法无参数且类未实现Supplier{Noun}ProviderAwsCredentialsProviderget 方法有参数{Noun}FactoryAwsJsonProtocolFactory见 AwsJsonProtocolFactory.java3.1 Supplier以java.util.function.Supplier为契约如果一个类的获取方法无参并且类直接实现了 JDK 标准函数式接口SupplierT即提供T get()那么它就是{Noun}Supplier。仓库中的 CachedSupplier.java位于utils模块是一个典型实现它包装一个值并缓存get()在缓存过期时调用底层 supplier 重新取值同时支持基于 Jitter 的过期策略。命名为CachedSupplier既表明了它是个 Supplier又表明了它有缓存这一附加语义。3.2 Provider无参获取但不实现 Supplier如果类的获取方法同样无参数但它不是Supplier的实现例如方法名为resolve()、credentials()或自定义的getCredentials()返回类型与Supplier.get()不完全对齐则使用{Noun}Provider。AwsCredentialsProvider是贯穿 SDK 认证体系的核心接口它提供Credentials凭证但通过自有方法签名暴露而非直接实现SupplierCredentials。相关的实现类如ProfileCredentialsProvider、EnvironmentVariableCredentialsProvider等都遵循同一后缀形成可识别的家族可在 core/auth 模块中查看。3.3 Factory获取方法带参数当获取实例的方法带有参数参数通常用于决定创建何种实例时命名为{Noun}Factory。例如 AwsJsonProtocolFactory.java位于 core/protocols/aws-json-protocol它根据传入的协议上下文如序列化/反序列化配置、AwsJsonProtocolMetadata等创建 JSON 协议的编解码器与请求处理器。因为它需要参数才能完成创建所以是Factory而非Provider或Supplier。归纳无参 实现Supplier→ Supplier无参 不实现Supplier→ Provider有参 → Factory。四、服务特定类的命名Client / Manager / Presigner / Utilities对于与具体 AWS 服务绑定的类规范按是否发起服务调用 → 是否覆盖全部操作 → 是否代码生成 → 使用同步还是异步 HTTP逐层判定。完整的判定树如下类是否发起服务调用 ├─ 是可以调用服务的操作 │ ├─ 可以调用 *所有* contenteditable="false">【免费下载链接】aws-sdk-java-v2The official AWS SDK for Java - Version 2项目地址: https://gitcode.com/GitHub_Trending/aw/aws-sdk-java-v2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表