背景:一边是产品经理(这里可以理解为直接与程序猿沟通并下达需求者)频繁更改需求,一边是程序猿的接口代码或者表设计越来越臃肿不堪,兼容多个不同版本APP越来越难。
问题:那么问题来了,如何才能满足不断变更的业务数据变化地进行接口开发呢?
方案:使用AOP的思想进行面向行为方法的切面编程(参考下图)。
AOP(此概念请参考百度百科):Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题。AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。比如我们最常见的就是日志记录了,举个例子,我们现在提供一个查询学生信息的服务,但是我们希望记录有谁进行了这个查询。如果按照传统的OOP的实现的话,那我们实现了一个查询学生信息的服务接口(StudentInfoService)和其实现 类 (StudentInfoServiceImpl.java),同时为了要进行记录的话,那我们在实现类(StudentInfoServiceImpl.java)中要添加其实现记录的过程。这样的话,假如我们要实现的服务有多个呢?那就要在每个实现的类都添加这些记录过程。这样做的话就会有点繁琐,而且每个实现类都与记录服务日志的行为紧耦合,违反了面向对象的规则。那么怎样才能把记录服务的行为与业务处理过程中分离出来呢?看起来好像就是查询学生的服务自己在进行,但却是背后日志记录对这些行为进行记录,并且查询学生的服务不知道存在这些记录过程,这就是我们要讨论AOP的目的所在。AOP的编程,好像就是把我们在某个方面的功能提出来与一批对象进行隔离,这样与一批对象之间降低了耦合性,可以就某个功能进行编程。
解决思路描述:
一、解决多个APP版本接口升级问题,同一个接口action通过api_version_code来变换接口版本,但是前提是必须与客户端(android、ios)对接出一个接口说明文档,接口说明文档里面针对不同的api_version_code接受不同的参数数组,然后返回不同的json接口数据。下面以ThinkPHP3.2.3为例,在API开发模块建立一个叫BaseController的类,并在里面实现当找不到对应controller时调用的方法,代码如下:
/** * @description 接口方案改版与升级 * @param string $method * @param array $args */ protected function _empty($method, $args) { if(!method_exists($this,$method)) { $args = is_array($args)?$args:[]; $this- |