转换器与映射器的项目目录归属咨询及结构合理性探讨
项目目录结构中Converter与Mapper的放置建议
一、Converter的放置位置
你的YearMonthDateConverter完全适合放在当前目录树的util/converter下:
- 代码的包声明
com.example.em_card_service.util.converter与该目录完全对应,符合Java包与目录结构一致的规范 - 这个JPA属性转换器是通用类型转换工具,不包含业务逻辑,归到
util下的专属子包,既符合工具类的归类逻辑,也能保持目录结构的整洁
对应目录路径:util/converter/YearMonthDateConverter.java
二、Mapper的放置位置
你的CardMapper适合放在当前目录树的util/mapper下:
- 代码包声明
com.example.em_card_service.util.mapper与该目录完全匹配,遵循包结构规范 - 作为MapStruct映射器,它仅负责DTO与实体的转换,属于通用转换工具,和service层的业务逻辑代码明确区分,放在
util/mapper下能避免业务代码与工具类混杂
对应目录路径:util/mapper/CardMapper.java
三、归属类别的说明
它们都属于util类,而非service类:
- Service层核心职责是处理业务逻辑,包含业务规则、事务控制等核心业务内容
- Converter和Mapper仅做类型转换,是可复用的通用工具,不包含业务逻辑,归到util层更合理
四、关于根级专属包的疑问
不需要将它们移到根级的converter、mapper专属包,理由如下:
- 当前
util下已经有对应的子包,且包声明与目录结构一致,沿用现有结构能保持层级清晰 - 只有当项目中这类转换器、映射器数量极大,且和其他util工具类有明确的功能边界需要单独管理时,才考虑拆分根级专属包。从当前结构来看,现有目录已经能很好地满足归类需求
内容的提问来源于stack exchange,提问作者Sergey Zolotarev
相关产品推荐
相关产品推荐

