phalapi-进阶篇1(Api,Domain,和Model)

#phalapi-进阶篇1(Api,Domain,和Model)#

##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架.

本小节已经步入了进阶篇,在进阶篇中会着重谈论一些框架中运用的一些好的思想并且进行解读,本小节主要是讲解在Phalapi框架中推荐使用的三层结构Api+Domain+Model将从各个角度和整体角度进行讲解.

附上:

官网地址:http://www.phalapi.net/

开源中国Git地址:http://git.oschina.net/dogstar/PhalApi/tree/release

##1. Api+Domain+Model##

其实这样的三层结构和java中的web+service+dao比较像只是说web和api一个进行页面显示一个不进行页面显示这个区别,在着重讲一下这三层在Phalapi中分工是怎么样的,他们分别担当者什么样的角色,需要做什么样的事情.

###1.1 Api层###

为什么说Api层像java中的web层呢,因为他们有一个共同的特性就是接受请求和返回结果.只是可能说java中没有那么强烈,它会通过控制器吧请求转发到service层处理好了拿到结果在展示页面,所以Api更像担当这控制器的作用.

Api层中需要做的事情如下:

  1. 注册接口/定义接口和控制请求参数 这是首先要做的事情,和在web中的url一样,然后就是添加需要接受的参数以及对参数需要的验证如下: public function getRules(){ return array( 'index' => array( //定义接口名 //添加参数验证机制 'username' => array('name' => 'username', 'default' => 'PHPer',), ), ); }
  2. 进行业务/逻辑的拼接 在这里进行业务/逻辑拼接,举个例子比如说是查询列表接口需要做两件事情,第一验证用户(是否存在是否有权限),第二查询出应该返回的列表,应该是如下样式 //验证用户 $Domain_Developers = new Domain_Developers(); $Domain_Developers->checkDev($this->dId); //获取用户的APP列表 $Domain_App = new Domain_App(); $Domain_App->getMyAppList($this->dId);
  3. 返回结果 返回结果就比较简单了就是把你经过上面拼接处理后获得的数据返回,如下: return $data;

###1.2 Domain层###

Domain层主要负责的是具体的业务实现拿用户验证,一个Domain方法就是一个小的业务具体实现(注意尽量吧业务划分的小一点方便通用)

/**
* 用户验证
*/
public function checkDev($dId){
    //通过ID 获取用户
    $Model_Developers = new Model_Developers();
    $dev              = $Model_Developers->checkDevdId($dId);
    //用户不存在处理
    if(!$dev){
        throw new PhalApi_Exception_BadRequest(T('No Dev'), -1);
    }
}

###1.3 Model层###

Model层其实无需多讲也就是把数据库操作单独提炼出来,统一处理如下

/**
 * 验证用户存不存在
 */
public function checkDevdId($dId){
    return $this->getORM()->select('dId')->where('dId', $dId)->fetch();
}

##2. 三层结合使用的好处##

  1. 结构清晰,互不干扰 就我个人感觉来说,在实际开发中使用这样的三层结构带来的最大的好处在于结构清晰,为什么这么说,因为每一层需要做的事情就是非常独立的,你永远不会在API层中看到数据操作的代码,所以在排查问题的时候是数据出了问题肯定不会去API层里面去找问题,非常方便与错误的定位,再者就是代码可读性非常高,相对于mvc框架来说这样的好处是非常明显的.
  2. 高度解耦,灵活高可用 带来的第二个很重要的好处就是解耦和高可用,高可用体现在,Api可以重复利用Domain,Domain可以重复利用Model,可以减少很多不必要的代码量,而且互相的关系仅仅只是拼接所以除非是结果会互相影响的情况下就实现了解耦.
  3. 分工合作,提高效率 在有这样的一套规范之后在分工和做的,对方不需要去看你的代码具体实现了什么,只需要看你这个方法干了什么,直接拿起来用就可以了,当然是在业务划分成小块的情况下,而且可以很明确的划分出来模块,当你需要用到对方的模块的时候只需要让对放提供,这样可以增加模块的专注性从而提高合作开发的效率

##3. 总结##

其实在刚刚接触这个框架的时候我也是特别不能理解这样划分的作用,在后面的开发中以及和别人的交流冲进行了一些尝试,发现确实这样用起来有很多的好处,也希望今天的教程也能让大家理解,这样的一种规范可以带来很多的好处并且尝试的去尝试和使用.

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

官网QQ交流群:421032344 欢迎大家的加入!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android群英传

单应用的多进程架构

1051
来自专栏京东技术

【实例分享】Mock框架的三次迭代,让你的单元测试更高效

对于单元测试中的单元,不同的人有不同的看法:可以理解为一个方法,可以理解为一个完整的接口实现,也可以理解为一个完整的功能模块或者是多个功能模块的一个耦合。

1750
来自专栏张善友的专栏

持续集成及部署利器:Go

Go是一款先进的持续集成和发布管理系统,由ThoughtWorks开发。(不要和Google的编程语言Go混淆了!)其前身为CruiseControl,是Tho...

2985
来自专栏Kevin-ZhangCG

前后端分离原理

  前后端分离已成为互联网项目开发的业界标准使用方式,通过Nginx+Tomcat的方式(也可以中间加一个Node.js)有效的进行解耦,并且前后端分离会为以后...

4.4K3
来自专栏大史住在大前端

webpack4.0各个击破(10)—— Integration篇

webpack在工具链中的角色定位是非常清晰的,那么为了与其他流程进行合作,就需要使用任务管理工具来启动webpack,本文介绍两种常见的方法。

1013
来自专栏后端技术探索

新浪微博平台服务部署及Web框架

平台作为整个微博架构的基础功能服务层,对外以Http接口的方式提供服务。接口遵守RESTful规范。接口示例如下:

2052
来自专栏JavaWeb

使用Spring profile 多环境配置管理

3648
来自专栏IMWeb前端团队

Thrift前端上手实例

? 项目介绍 项目地址 这个项目用来帮助那些对thrift感兴趣的前端们上手thrift, 你可以把它认为是一个简易的使用案例或是指南, 毕竟thrift的...

2590
来自专栏张善友的专栏

深入浅出事件流处理NEsper(一)

    对实时信息分析和处理,常常需要客户应用程序的开发相应功能。一般地,这些功能需要提供以下的处理流程,分析获取的数据,筛选数据,提取出有用的信息,然后将其通...

2319
来自专栏小怪聊职场

爬虫课程(十三)|ajax分析法(雪球),通过获取api并破解api的反爬策略爬取数据

4429

扫码关注云+社区

领取腾讯云代金券