首页新闻找找看学习计划

【java】这样使用 注解 规范吗?

0
悬赏园豆:200 [待解决问题]

项目环境

  1. 使用 SpringCloud
  2. 各服务模块依赖 common-remote 模块,通过里面的 Feign Client 进行跨服务调用
  3. 工具类均放在 common-service 模块里面,各模块依赖 common-service
  4. common-servicecommon-remote 没有依赖关系

背景

  1. 由于要对接第三方系统,需要将本系统A的字段 与 第三方系统B的字段 建立映射关系,比如 A系统 字段名为 a1的值 要赋值给 B系统 字段名为 b2
  2. 笔者开发了一个注解MyAnnotation 以及工具类utils,通过在a1字段上添加注解 @MyAnnotation(name = "b2",dataType = DataType.Employee) ,然后将 所在类 传入工具类,工具类会根据 dataType进行值的转换以适配B系统,再进行字段重命名(a1 => b2),即可输出对应的 数据结构(假设为 AimClass)

    类似于 @JSONField(name="b2")

  3. 开发的远程Feign接口 ThePort 的参数类为 AimClass,只能通过 AimClass 参数类才能向第三方发起请求,位于 common-remote

权衡

好处

  1. 调用者只需进行注解的书写,无需关注值的转换 以及 数据结构的构造过程,有利于 项目快速开发 以及隐藏细节

坏处

  1. 通过注解 与表单有着某种耦合,当 A系统的表单结果调整了,修改者或许不敢乱改代码
  2. 接口 依赖于 工具类,因为如果缺少工具类,构造 AimClass 很困难或者 易出错,因此使用这个远程接口及必须要有这个工具类

    举个例子,如果公司其他项目想通过 远程接口ThePort 访问 第三方系统,就会出现这个问题。

我的想法

  1. 我问过一位同事,十分认同他一个说法, 使用工具类没有问题,以内这个是需要对接的、位于两个系统的单据结构属于强关联的关系,因此当A系统修改需要修改 表单结构,那么B系统的表单结构也会改变,而调用者改的只是注解。

我的问题

  1. 坏处中的第二个问题可以通过 将此工具类 放在 common-remote 中解决,但是这样 科学吗?规范吗?
  2. 笔者这种通过注解 + 工具类 的解决方案是否 可取呢?为什么?
  3. 有没有其他参考的方案呢?
15klli的主页 15klli | 初学一级 | 园豆:21
提问于:2020-03-27 18:03
< >
分享
所有回答(1)
0

从通用性考虑,不建议这么做,如果有其他系统接入,则要改动公共模块不合理。
我个人觉得,有两种情况:
1、作为数据提供方,比较强势那种,公开API和文档说明,由需求方去请求数据和转换为自身数据;
2、做转换器,用于转换数据,定义好转换接口,当有第三方接入时,对应的开发转换器即可,主体业务代码和框架不需要改动。

。淑女范erり | 园豆:751 (小虾三级) | 2020-03-27 19:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册