V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
LuciusChen
V2EX  ›  JavaScript

这种业务场景有没有更优雅的方式?

  •  
  •   LuciusChen · 2022-01-05 09:58:35 +08:00 · 2527 次点击
    这是一个创建于 1088 天前的主题,其中的信息可能已经有所发展或是发生改变。

    后端: 判断 3 依赖判断 1 添加的数据。

    // 判断 1 为提示信息,确定后跳转下个页面
    if (condition){
        result.setCode("0002");
        result.setMsg("msg");
        return result;
    }
    // 判断 2 为校验数据是否存在,前端给出弹框,确定后自动添加数据,并跳转下一个页面。
    if (condition){
        result.setCode("0001");
        result.setMsg("msg");
        return result;
    }
    // 判断 3 同样为提示信息,确定后跳转下个页面。
    if (condition){
        result.setCode("0003");
        result.setMsg("msg");
        return result;
    }
    

    前端: 普通情况下,三个提示都是单一提示。 但也会出现需要顺序提示的情况,比如:

    1. 满足判断 1 ,前端提示,判断 1 前端确定后,如果条件满足提示判断 2 ,确定后添加数据并提示判断 3 ,确定后跳转下一个页面。
    2. 满足判断 2 ,前端提示,判断 2 前端确定后,满足判断 3 提示,确定后跳转下一个页面。

    目前上述判断都在后台同一个接口内,涉及到顺序提示的时候,前端调用后台代码就需要在对应的 code 分支内重复调用该接口。

    判断 1 在第一次点击确定后,后续接口不再校验该场景。如果重新进入该页面,则判断 1 对应场景需重新校验。

    7 条回复    2022-01-05 23:54:15 +08:00
    3dwelcome
        1
    3dwelcome  
       2022-01-05 10:19:36 +08:00
    "前端调用后台代码就需要在对应的 code 分支内重复调用该接口。"

    我觉得业务逻辑没什么问题,但是你前端重复请求那就有问题了。

    可以考虑把前端的几次请求,打包合并成一个后发送,然后按照多个命令的形式来解析。
    InkAndBanner
        2
    InkAndBanner  
       2022-01-05 10:22:43 +08:00
    没有什么是加状态不能解决的 如果有 那就加两个
    ccraohng
        3
    ccraohng  
       2022-01-05 10:28:13 +08:00
    看起来是不同的逻辑,有不同的连续执行逻辑单元
    每个执行单元统一封装成 promise 函数,丢到 map 里,然后不同入口拿到各个函数,用数组串联起来执行
    66beta
        4
    66beta  
       2022-01-05 10:35:29 +08:00
    我觉得可以找产品经理再理一下业务逻辑
    LuciusChen
        5
    LuciusChen  
    OP
       2022-01-05 12:18:23 +08:00
    @3dwelcome 不能打包一起,因为要让用户感知,而且其中一个提示确定后还会新增数据,这个数据是后续判断的前提。
    iamzuoxinyu
        6
    iamzuoxinyu  
       2022-01-05 17:38:22 +08:00
    按[(cond, code, msg)]打表,在复杂就写成状态机。
    LuciusChen
        7
    LuciusChen  
    OP
       2022-01-05 23:54:15 +08:00
    @iamzuoxinyu 打表?没懂。。。(尴尬
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2804 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:20 · PVG 21:20 · LAX 05:20 · JFK 08:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.