微服务间共享类型是否可行?用于提升编码体验及提前发现错误
微服务中共享类型定义的合理性疑问
我正在学习微服务相关知识,了解到微服务架构中服务间共享对象属于不良设计,核心原因是需要复用对象往往意味着服务拆分的粒度不够合理。
但如果共享的并非对象实例,只是对象的类型定义——目的仅为提升编码体验(比如属性自动补全),以及在服务数据结构发生变更时触发构建失败、提前发现问题,这种做法仍不可取吗?
场景示例
假设有两个微服务:A(销售服务)和B(产品服务)。A需要向B请求产品P,解析P的x、y、z三个属性来计算最终售价。如果开发者修改了B的产品结构(例如将属性z重命名为j),A会因找不到z属性而运行崩溃。但如果全局共享产品P的类型定义,A就能在开发或构建阶段感知到z已不存在,提前抛出错误,理论上可以避免大量此类问题进入生产环境。
参考观点与我的实现思路
曾看到一种观点:
当服务B使用服务A的输出时,仅映射服务B所需的部分。服务B应拥有独立模型,只关注服务A输出中与自身相关的内容。
针对这个观点里的「映射所需部分」环节,我想到的具体实现方式如下:
import { Bproduct } from globalTypesPackage // 这个包包含所有服务的对象类型定义 const origP: Bproduct = await getPFromB() const altP = new Aproduct(origP.x, origP.y, origP.z) // 这里得到的是服务A专属的Aproduct对象 // 不会在A中直接使用Bproduct作为业务对象,仅用它在映射阶段捕获错误——如果z不存在,开发时就会报错,构建也会失败
内容的提问来源于stack exchange,提问作者Pursuable
相关产品推荐
相关产品推荐

