由于产品系统升级,假设是由A系统升级为B系统,现在拿同一个产品详情信息,A系统和B系统的信息一模一样,不同的所有信息两个系统给前端的字段名称不一样,然而我在显示产品详细信息的时候我不想A || B这样显示不同系统的信息,因B升级完全完成测试没有问题后A终将淘汰,有什么比较优雅的方法解决这个问题吗?
我是前端开发,应用的框架为angular14
接口返回后立马转换这个方案行不通,因为我后面拿产品下单需要将整个product信息传给后端,A系统需要A系统的数据,B系统需要B系统的数据结构,单独定义一个常量用于HTML的显示也不合适,因为产品显示的地方非常多,很多是嵌套在cart对象里面的,我们是电商系统产品信息跟下单流程息息相关。
没明白你想干什么。如果一个数据,分别从 A 和 B 去拿,那就可能拿到 1 个或者 2 个数据。如果只拿到一个就好办,用它就行。如果拿到两个,在这两个数据中,一定要做出一个选择
A ?? B
B ?? A
{ ...A, ...B }
或{ ...B, ...A }
如果 A 和 B 的部分属性名称不一样,可以理解为接口不一样(获取属性的接口)。解决接口不一样可以使用适配器。比如
A 是
{ product_name: "", product_price: 11 }
这样的B 是
{ productName: "", productPrice: 11 }
这样的以 B 为标准,给 A 写适配器
然后写一个适配函数,根据你的开关来选用其中一个。比如
当然,如果属性名称变化比较有规律,可以使用 Proxy 来代替 Adapter,也可以直接在 wrap 函数进对对象进行转换处理,比如从下划线方式转为 camel(用 Lodash,或者 name-styles - npm (npmjs.com))
属性名如果没有特别的规律,也可以建名称映射表来处理。就写在对 A 的适合处理代码文件中,毕竟这个文件以后是要拿掉的。举例: