获取接口数据后执行转换的正确方案,RxJS前端数据处理相关疑问
问题1:是否应该用Country Class替代interface
你的思路完全合理,具体选择可以根据业务场景判断:
- 如果
Country仅用来做类型声明、不需要挂载专属方法或做实例化操作,用interface就足够,代码更轻量。 - 如果后续会扩展和
Country实体相关的业务逻辑,换成Class是更符合封装原则的方案:可以在构造函数中接收接口返回的responseCountry数据,直接在类内部完成字段转换、总支出计算,把和实体相关的逻辑从服务中剥离,后续维护、单元测试都更方便。
如果不想改类,也可以单独抽离一个公共的transformCountry转换函数,同样能达到把转换逻辑和服务解耦的效果。
问题2:reduce运算耗时会不会导致totalExpense为undefined
不会。Array.reduce()是同步方法,JavaScript单线程会等待整个reduce运算执行完成才会返回结果,不管耗时多久,都不会出现异步导致的返回值提前为undefined的问题。
需要注意的异常场景只有:入参products为null/undefined、或者数组元素的price/quantity_for_month不是合法数字,这时候运算结果会返回NaN,你可以加个简单的兜底判断即可,比如给products设置默认空数组、运算前判断字段合法性。
问题3:这类转换是否应该放在后端
没有绝对的规范要求,根据实际场景选择即可:
- 如果
totalExpense、quantity_of_products这两个字段是多端(安卓、iOS、其他前端系统)通用的统计字段,或者单条country关联的products数据量极大(过万条以上),优先放后端处理,既减少多端重复开发,也降低前端运算压力和接口传输的数据量。 - 如果这两个字段是当前前端页面独有的展示需求,后端接口是通用公共接口,那放在前端转换是非常普遍的做法,完全符合开发规范。
内容的提问来源于stack exchange,提问作者Lasha M
相关产品推荐
相关产品推荐

