App架构设计经验谈:业务层的设计

原创文章,转载请注明:转载自Keegan小钢
并标明原文链接:http://keeganlee.me/post/architecture/20160214
微信订阅号:keeganlee_me
写于2016-02-14


App架构设计经验谈:接口的设计
App架构设计经验谈:技术选型
App架构设计经验谈:数据层的设计
App架构设计经验谈:业务层的设计
App架构设计经验谈:展示层的设计


业务层其实并不复杂,但是大部分开发人员对其职责并没有理解清楚,从而使其沦落为一个数据中转站。我之前分享过的Android项目重构之路系列中提到的核心层,其实就是这里所讲的业务层。但有不少读者反映,他们在实际项目中就只是做一下参数检查,然后直接调用API,与展示层对接的接口基本也与API的接口一致的。这样,业务层无疑就已经变为了一个数据中转站。

业务层的职责

所以,设计业务层之前,对业务层的职责要先真正理解清楚。这里,我举两个栗子说明一下。

第一个是新用户注册的例子。注册时,界面上一般都会要求用户输入手机号、验证码、密码和确认密码。但是,API接口一般只会有三个参数:手机号、验证码和密码,不会有确认密码。因此,调用接口之前,密码和确认密码的一致性检查是必须的。同时,也要检查这些数据是否为空、手机号是否符合规范、验证码是否有效、密码有没有包含了特殊字符等。正确姿势就是当所有检查都通过了之后,才调用API接口。最后,调用注册接口成功后,可能还要再调用一次登录接口,并可能将用户登录信息缓存起来,方便用户下次启动应用时自动登录。所有这些都属于业务逻辑处理,也就是业务层的工作。

第二个是涉及用户验证的例子。比如,在一个电商App,当用户浏览某个商品,点击购买时,App首先会判断用户是否已经登录,如未登录,则会跳转到登录页面让用户先登录。如果已经登录,但token已经过期,那需要先去获取新的token,之后才能进行下一步的购物操作。这些逻辑处理,也是业务层的工作。

因此,简单点说,业务层就是处理业务逻辑,包括数据的检查、业务分支的处理等。比如上面第二个例子,可能很多人就会将用户是否已经登录的判断直接在界面上做处理,当确认登录后,token也是有效的之后,才调用业务层做购买商品的操作,这就是导致业务层沦落为API的数据中转站的直接表现。

业务层的交互

只有真正理解了业务层的职责之后,才能有效地设计业务层与外层的交互接口。

业务层向下,与数据层交互;向上,与展示层交互。

与数据层交互只是调用数据层的接口获取数据,而与展示层交互则需要提供接口给展示层调用。因为业务处理一般属于比较耗时的操作,主要在于底层的网络请求比较耗时,所以提供给展示层的接口数据结果应该以异步的方式提供,因此,接口上就需要提供个回调参数,返回业务处理之后的结果。我之前分享过的Android项目重构之路:实现篇有讲到一种实现方式,可参考。

写在最后

业务层可以说是一个数据加工场,处理核心的业务逻辑。其实,只要理解清楚了业务层的职责,业务层就不难实现。


扫描以下二维码即可关注订阅号。

  • 齐晶2016-02-15 08:48

    你好!文章中有句 (我举两个栗子说明一下) 是你玩的个性还是错别字哈哈!!!

  • 齐晶2016-02-15 08:51

    你好!文章很赞! (我举两个栗子说明一下) 是你玩的个性还是错别字哈哈!!!

  • 有态度网友06MY5Z2016-02-15 19:44

    不是错别字

  • 有态度网友06MY6V2016-02-20 18:32

    [礼花] 非常不错,感谢。。。。。。。

  • 种黄瓜的小菜2016-02-29 23:01

    “比如上面第二个例子,可能很多人就会将用户是否已经登录的判断直接在界面上做处理,当确认登录后,token也是有效的之后,才调用业务层做购买商品的操作,这就是导致业务层沦落为API的数据中转站的直接表现。”没太明白钢哥的意思,您能给讲下前端界面以及后端业务层,具体分别需要做哪些操作么。

  • 有态度网友06MY5Z2016-02-29 23:20

    首先,这里的业务层也是指前端的业务层,而不是后端的业务层。其次,界面层和业务层的解耦,重点就是要理解界面层纯粹只做数据展示,展示层需要数据了,就调用业务层接口,得到数据后就直接展示结果了,中间的所有数据处理都在业务层做。

  • 种黄瓜的小菜2016-03-01 08:12

    哦,明白了。多谢钢哥!

  • 有态度网友06MY7s2016-03-26 12:10

    数据层和业务层算是对mvc模式中的m的细分吗?

  • 有态度网友06MY5Z2016-03-26 14:47

    不是,确切说其实跟MVC一点关系也没有

  • 反革命攻城狮CasaTa2016-04-11 20:41

    大家可以去参照casatwy.com的架构谈文章,比这里出的早,而且这里的思想其实都在casatwy.com找得到,最重要的是,写得比这里好。

  • 有态度网友06MY8k2016-04-29 11:39

    说下我的理解,钢哥的分层更接近MVP,钢哥的数据层对应Model,业务层对应Presenter。钢哥对吗

  • 有态度网友06MY8H2016-06-02 14:37

    我也是这么认为的,MVP分别与数据层、展示层、业务层对应。

  • 有态度网友06MY8M2016-06-07 15:55

    傻逼似的

  • 有态度网友06MY5V2016-06-12 17:41

    不解释,二逼,自己去想为什么。路人甲。。。

  • 有态度网友06MYar2017-03-06 22:45

    有帮助 谢谢