SpringCloud
common-remote
模块,通过里面的 Feign Client
进行跨服务调用common-service
模块里面,各模块依赖 common-service
common-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、做转换器,用于转换数据,定义好转换接口,当有第三方接入时,对应的开发转换器即可,主体业务代码和框架不需要改动。