前端如果真的想要了解业务......

567 阅读3分钟

如题,前端终归接触的是展示层的数据,倘若按照 mvc 模式划分的话,仅仅是一个 v 层面而已,这样是不利于全局发展和培养大局观的,总是要走出舒适圈的,今天我们就来尝试一下,走出 js 的舒适圈。

业务中我们可能会碰到这样一个需求,就是点击新增后往一个表格中添加数据,点击新增按钮后首先会出现一个弹窗,然后弹出一个可以多选的网格弹窗,用户在选择一条或者几条数据后点击确定,然后将数据添加进明细表即可,但是此时因为业务需求,新增弹窗所提供的数据不够详细,于是我们就需要在用户选择完数据后,在点击选择按钮后继续去调用一个后台接口,将所选的数据以数组方式传递给后台,让后台对数据尽心加工后再返回给我们,之前也没太关注这里,就是草草编写了业务逻辑,真要问我为什么调用这个接口,我只能像上面说的,大致描述缺少字段,具体缺少那些字段,为什么缺少,我是一点答不上来。今天我们就重点去看看这个接口到底干了什么。 QQ截图20210414094532.png

首先打断点,我们知道,这个接口名字叫做 GetMoveLineForPdaAdd ,系属于 stock_ItemMoveService 控制器,然后我们可以在后台项目中全局搜索这个 GetMoveLineForPdaAddQQ截图20210414095120.png

不出意外,就会搜索到这段代码 QQ截图20210414095350.png

碰到 c# 代码了,但是不要慌,毕竟我们也是有几年 js 功底的,我们就来分析下这段代码都干了什么。其实总体来说类似于我们 js 中经常写的方法,也是用来给大家调用的。

首先:

[HttpPost]

这个不用过分纠结,大致可以理解为这些方法要分类别,大致分为 get 和 post 两大类,加入 [HttpPost] 代表着属于 post 类别,必须用 post 方式才能调用,同理还有 [HttpGet]

然后:

public ApiResponseContent GetMoveLineForPdaAdd(JObject jo)

可以理解为定义一个方法,方法名字叫做 GetMoveLineForPdaAdd ,支持传参 jo。

再然后:

string errMsg = string.Empty;

代表着初始化一个变量 errMsg,然后默认初始值为 null。

其次:

if (jo == null)
    return Fail("传入参数为空!");

对所传参数 jo 进行非空校验。

再其次:

if (jo["data"] == null)
    return Fail("传入data不能为空!");

这里,我们得出,jo是个对象,里面必定有 data 属性,并且对 data 也会进行非空校验。

继而:

var userInfo = CurrentUser;

定义了一个局部变量 userInfo 用来缓存全部变量 CurrentUser。

再次:

if (userInfo.EmpId == null)
{
    return Fail("登录过期,请重新登录!");
}

对刚刚缓存的 userInfo 判断其 EmpId属性是否为空,若为空,则提示用户登录过期

关键的来了:

var result = Stock_ItemMoveOperate.GetMoveLineForPdaAdd(JsonConvert.DeserializeObject<List<V_BasicItem_ItemViewDTO>>(jo["data"].ToString()),out errMsg)

这里我们知道,我们传给后台的数据并不是在这里处理加工的,而是又被转手到了这个方法里面,接着我们选中方法,按 f12 跟进去。

跟进去之后,会看到一个大致这样的方法,而这个方法,也就确确实实向我们展示了后台处理这个业务的详细逻辑。 QQ截图20210414102412.png 这个时候我们其实可以大致总结下:

该段代码通过将所传的数据获取到库存数据,在对该库存数据进行遍历时进行了业务数据的赋值,最后将得到的数据返回,最终成功得到了修正过后的完整库存数据。

最后:

return string.IsNullOrEmpty(errMsg) ? Success(result) : Fail(errMsg);

判断是否报错,若没有报错,则返回最终数据,若报错,则返回报错信息