【java】这样使用 注解 规范吗?
项目环境
- 使用
SpringCloud
- 各服务模块依赖
common-remote
模块,通过里面的Feign Client
进行跨服务调用 - 工具类均放在
common-service
模块里面,各模块依赖common-service
common-service
与common-remote
没有依赖关系
背景
- 由于要对接第三方系统,需要将本系统A的字段 与 第三方系统B的字段 建立映射关系,比如 A系统 字段名为 a1的值 要赋值给 B系统 字段名为 b2
笔者开发了一个注解
MyAnnotation
以及工具类utils
,通过在a1字段上添加注解@MyAnnotation(name = "b2",dataType = DataType.Employee)
,然后将 所在类 传入工具类,工具类会根据dataType
进行值的转换以适配B系统,再进行字段重命名(a1 => b2
),即可输出对应的 数据结构(假设为AimClass
)类似于
@JSONField(name="b2")
- 开发的远程
Feign
接口ThePort
的参数类为AimClass
,只能通过AimClass
参数类才能向第三方发起请求,位于common-remote
中
权衡
好处
- 调用者只需进行注解的书写,无需关注值的转换 以及 数据结构的构造过程,有利于 项目快速开发 以及隐藏细节
坏处
- 通过注解 与表单有着某种耦合,当 A系统的表单结果调整了,修改者或许不敢乱改代码
接口 依赖于 工具类,因为如果缺少工具类,构造
AimClass
很困难或者 易出错,因此使用这个远程接口及必须要有这个工具类举个例子,如果公司其他项目想通过 远程接口
ThePort
访问 第三方系统,就会出现这个问题。
我的想法
- 我问过一位同事,十分认同他一个说法, 使用工具类没有问题,以内这个是需要对接的、位于两个系统的单据结构属于强关联的关系,因此当A系统修改需要修改 表单结构,那么B系统的表单结构也会改变,而调用者改的只是注解。
我的问题
- 坏处中的第二个问题可以通过 将此工具类 放在
common-remote
中解决,但是这样 科学吗?规范吗? - 笔者这种通过
注解 + 工具类
的解决方案是否 可取呢?为什么? - 有没有其他参考的方案呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
以我个人来说,我会使用
AimClass.from(originClassInstance);
其实就是把你的工具类融合到目标类里.
理由:
AimClass
需要,转换逻辑的输出即AimClass
,那么只需要把转换逻辑封装到该类中即可.@MyAnnotation
注解来处理.但是注意,这里的@MyAnnotation
应该修饰的是AimClass
上的字段.OriginClassInstance
.AimClass
不依赖OriginClass
也是可以的(不然就需要 remote 反过来依赖OriginClass
所在的包了,虽然可以通过provide
解决但是终究看着闹心):