SpringCloudcommon-remote 模块,通过里面的 Feign Client 进行跨服务调用common-service 模块里面,各模块依赖 common-servicecommon-service 与 common-remote 没有依赖关系笔者开发了一个注解MyAnnotation 以及工具类utils,通过在a1字段上添加注解 @MyAnnotation(name = "b2",dataType = DataType.Employee) ,然后将 所在类 传入工具类,工具类会根据 dataType进行值的转换以适配B系统,再进行字段重命名(a1 => b2),即可输出对应的 数据结构(假设为 AimClass)
类似于
@JSONField(name="b2")
开发的远程Feign接口 ThePort 的参数类为 AimClass,只能通过 AimClass 参数类才能向第三方发起请求,位于 common-remote 中
接口 依赖于 工具类,因为如果缺少工具类,构造 AimClass 很困难或者 易出错,因此使用这个远程接口及必须要有这个工具类
举个例子,如果公司其他项目想通过 远程接口
ThePort访问 第三方系统,就会出现这个问题。
common-remote 中解决,但是这样 科学吗?规范吗?注解 + 工具类 的解决方案是否 可取呢?为什么?从通用性考虑,不建议这么做,如果有其他系统接入,则要改动公共模块不合理。
我个人觉得,有两种情况:
1、作为数据提供方,比较强势那种,公开API和文档说明,由需求方去请求数据和转换为自身数据;
2、做转换器,用于转换数据,定义好转换接口,当有第三方接入时,对应的开发转换器即可,主体业务代码和框架不需要改动。