在NestJS+TypeScript微服务中用嵌套策略模式优化多层if逻辑
基于策略模式重构微服务的Payload处理逻辑
我需要在一个仅负责接收Payload、验证Payload、适配Payload并写入数据库的微服务中应用策略模式。输入Payload包含origin、context、action三个核心字段,规则如下:
origin: { food, non-food }context: { cart, order, catalog }actionCart: { getCart, addItemCart, removeItemCart }actionOrder: { getOrder, createOrder, getHistory }actionCatalog: { getCatalog }data: 原始Payload数据
核心逻辑是:origin决定可用的context范围,context决定可用的action类型,不同action对应不同的Payload适配方法,最终将适配后的数据写入对应数据库。
目前我用嵌套if的方式实现了这个逻辑,但代码冗余且难以维护,示例如下:
if (food) { if (context1) { // 该context下所有操作写入数据库context1 if (action1) { // 组装特定Payload并写入数据库 } if (action2) { // 组装特定Payload并写入数据库 } if (action3) { // 组装特定Payload并写入数据库 } } if (context2) { // 该context下所有操作写入数据库context2 if (action1) { // 组装特定Payload并写入数据库 } if (action2) { // 组装特定Payload并写入数据库 } if (action3) { // 组装特定Payload并写入数据库 } } if (context3) { // 该context下所有操作写入数据库context3 if (action1) { // 组装特定Payload并写入数据库 } if (action2) { // 组装特定Payload并写入数据库 } if (action3) { // 组装特定Payload并写入数据库 } } } if (non-food) { if (context1) { // 该context下所有操作写入数据库context1 if (action1) { // 组装特定Payload并写入数据库 } if (action2) { // 组装特定Payload并写入数据库 } if (action3) { // 组装特定Payload并写入数据库 } } if (context2) { // 该context下所有操作写入数据库context2 if (action1) { // 组装特定Payload并写入数据库 } if (action2) { // 组装特定Payload并写入数据库 } if (action3) { // 组装特定Payload并写入数据库 } } if (context3) { // 该context下所有操作写入数据库context3 if (action1) { // 组装特定Payload并写入数据库 } if (action2) { // 组装特定Payload并写入数据库 } if (action3) { // 组装特定Payload并写入数据库 } } }
我考虑过给origin、context、action每个层级单独应用策略模式,但感觉这种方案不够理想,希望能得到更合适的重构方案。
内容的提问来源于stack exchange,提问作者Miguel Sodré
相关产品推荐
相关产品推荐

