Java 开发笔记
约 767 字大约 3 分钟
2025-06-20
记录 Java 开发中常用的代码范例、命名规范和最佳实践。
开发范例
实体类定义
使用 Lombok 注解简化实体类代码,减少样板代码的编写。
以下是定义一个数据传输对象(DTO)的示例:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ExtractorDTO {
private String startTime;
private String endTime;
private String runTime;
}各注解的作用:
@Data:自动生成 getter、setter、equals、hashCode 和 toString 方法@NoArgsConstructor:生成无参构造函数@AllArgsConstructor:生成全参构造函数@Builder:启用建造者模式
对象转换
使用 MapStruct 进行对象间的映射转换,避免手写大量赋值代码。
以下示例展示如何将 UserEntity 转换为 UserDTO:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface UserMapper {
UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
@Mapping(source = "id", target = "userId")
@Mapping(source = "name", target = "fullName")
@Mapping(source = "email", target = "emailAddress")
UserDTO toDTO(UserEntity userEntity);
}调用方式:
UserDTO dto = UserMapper.INSTANCE.toDTO(userEntity);命名规范
接口命名
使用形容词或名词短语描述能力或角色,常见后缀有 -able、-ible 或 -er。
示例:Readable、Writable、Runner、Processor。
实现类命名
使用具体的名词描述实际的对象或实体。
- 默认实现:加
Default前缀,如DefaultReader - 具体实现:根据功能添加描述性前缀或后缀,如
FileWriter、ThreadRunner、ImageProcessor
后缀选择指南
不同后缀代表不同的职责定位,选择时应考虑类的核心意图。
Service
意图:提供完整的业务功能,面向更高层的抽象。
关注点:业务逻辑,通常集成多个操作或功能。
典型场景:
- 业务服务(如
UserService) - 功能性服务(如
EmailService) - 微服务架构中的模块化服务
示例:
OrderService:负责订单的创建、更新和查询NotificationService:提供通知的发送和管理功能
Processor
意图:专注于数据的加工、转换或处理,往往是流式或批量操作。
关注点:对输入数据的处理并生成输出数据,通常包含更复杂的逻辑。
典型场景:
- 数据处理(如
DataProcessor) - 消息处理(如
MessageProcessor) - 流式或批量任务处理(如日志、文件、数据流处理)
Handler
意图:处理特定的事件或请求,事件驱动型。
关注点:单一职责,执行简单的任务。
典型场景:
- 事件处理(如
EventHandler) - 请求处理(如
RequestHandler) - 任务处理中的某一环节(如
ErrorHandler)
示例:
LoginHandler:处理登录请求ClickEventHandler:响应用户点击事件
Checker
意图:执行检查或验证逻辑,返回布尔结果。
关注点:验证条件的真假,不执行复杂业务逻辑。
典型场景:
- 权限检查(如
PermissionChecker) - 数据验证(如
DataValidator) - 状态检查(如
StatusChecker)
总结
- 使用 Lombok 和 MapStruct 减少样板代码,提高开发效率
- 接口命名体现能力,实现类命名体现具体功能
- 后缀选择应与类的核心职责匹配:Service(业务)、Processor(处理)、Handler(响应)、Checker(验证)
