小程序商城API.jpg小编抽空完成了一个微信小程序商城,从中学到了小程序Api开发的流程 与 AOP面向切面编程思想的好处。
顺便总结一下开发小程序Api的思路:
以上是整个小程序Api的开发思路图。
从上图看出整个小程序包括很多个模块(banner,产品,订单,支付等),每一个模块都包含(控制层,Model层,验证层)。
该项目把其中的Model层基类,控制层基类,异常处理层基类,以及验证层基类单独地提取出来,给各个小程序模块调用,体现了Aop面向切面的编程。
微信小程序开发流程:
1.构建验证层 与 异常处理层 (AOP思想)
2.完成各个模块的业务代码 (如上图右侧)
Aop思想体现
1.无论是获取banner或者获取订单,产品等都需要我们验证各个输入参数的格式是否正确,如果不正常就需要进行异常处理抛出错误。
2.把验证层与全局异常层单独提取出来,再开发别的业务逻辑的时候,就不用再写一遍,直接调用该层。
/**
* Created by Cat.
* User: Administrator
* Date: 2019/2/14
* Time: 20:12
*/
class Banner
{
public function getBanner($id){
new IDMustBePostiveInt(); //全局验证层//全局验证层//全局验证层//全局验证层//全局验证层
$banner = BannerModel::getBannerByID($id);
if(!$banner){
throw new BannerMissException();//异常处理层//异常处理层//异常处理层//异常处理层//异常处理层
}
return json($banner);
}
}
class Product
{
public function getRecent($count = 15 ){
new Count();
$product = ProductModel::getMostRecent($count);
if($product->isEmpty()){
throw new ProductException();//异常处理层//异常处理层//异常处理层//异常处理层//异常处理层
}
$product=$product->hidden(['summary']);
return json($product);
}
小编的BannerMissException() 与 ProductException() 都是统一继承BaseException这个基类,单独把这个基类提取出来实现AOP思想.
我们一般做活动的时候,一般对每一个接口都会做活动的有效性校验(是否开始、是否结束等等)、以及这个接口是不是需要用户登录。
以前编程流程按照正常的逻辑,我们可以这么做。
这里写图片描述
这有个问题就是,有多少接口,就要多少次代码copy。对于一个“懒人”,这是不可容忍的。好,提出一个公共方法,每个接口都来调用这个接口。这里有点切面的味道了。
这里写图片描述
同样有个问题,我虽然不用每次都copy代码了,但是,每个接口总得要调用这个方法吧。于是就有了切面的概念,我将方法注入到接口调用的某个地方(切点)。
这里写图片描述
这样接口只需要关心具体的业务,而不需要关注其他非该接口关注的逻辑或处理。
网友评论