2019独角兽企业重金招聘Python工程师标准>>>

#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 欢迎大家的加入!

转载于:https://my.oschina.net/wenzhenxi/blog/518535

phalapi-进阶篇1(Api,Domain,和Model)相关推荐

  1. 如何深入理解PhalApi框架三层结构Api+Domain+Model模式

    1. Api+Domain+Model 其实这样的三层结构和java中的web+service+dao比较像,和我们平常所说的MVC开发模式也是非常想象.只是说web和api一个进行页面显示一个不进行 ...

  2. phalapi可以依赖注入么_phalapi-进阶篇8(PhalApi能带来什么和进阶篇总结)

    #phalapi-进阶篇8(PhalApi能带来什么和进阶篇总结) ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 到今天位置PhalApi已 ...

  3. CompletableFuture进阶篇-外卖商家端API的异步化

    CompletableFuture进阶篇-外卖商家端API的异步化 背景 为何需要并行加载 并行加载的实现方式 同步模型 NIO异步模型 为什么会选择CompletableFuture? Comple ...

  4. Java进阶篇(六)——Swing程序设计(上)

    Swing是GUI(图形用户界面)开发工具包,内容有很多,这里会分块编写,但在进阶篇中只编写Swing中的基本要素,包括容器.组件和布局等,更深入的内容这里就不介绍了.想深入学习的朋友们可查阅有关资料 ...

  5. C#使用Xamarin开发可移植移动应用进阶篇(10.综合演练,来一份增删改查CRUD)

    说点什么.. 呃 也有半个月没更新了. 本来这篇的Demo早就写完了,文章也构思好了.迟迟没发布..是因为实在太忙.. 项目要上线..各种  你们懂的.. 正赶上自己十一人生大事..结婚..所以..忙 ...

  6. Java进阶篇(六)——Swing程序设计(上),java面试题,java基础笔试题,BAT

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. Sw ...

  7. C# 30分钟完成百度人脸识别——进阶篇(文末附源码)

    距离上次入门篇时隔两个月才出这进阶篇,小编惭愧,对不住关注我的卡哇伊的小伙伴们,为此小编用这篇博来谢罪. 前面的准备工作我就不说了,注册百度账号api,创建web网站项目,引入动态链接库引入. 不了解 ...

  8. 【微信小程序控制硬件⑥ 进阶篇】服务器如何集成七牛云存储SDK,把用户自定义设备图片存储在第三方服务器!

    本博文由热爱分享热爱技术的半颗心脏原创,非官方人员.非组织名义编写,博文如有不对或侵犯您的权益,请及时留言,第一时间纠正! [微信小程序控制硬件①] 全网首发,借助 emq 消息服务器带你如何搭建微信 ...

  9. Java面试题-进阶篇(2022.4最新汇总)

    Java面试题-进阶篇 1. 基础篇 1.1 基本数据类型和包装类 1.2 Double转Bigdecimal可能会出现哪些问题?怎么解决? 1.3 equals 与 == 的区别? 1.4 Java ...

最新文章

  1. 查看Mat对象的数据的三种方法
  2. 在2003 server系统上部署DHCP服务器
  3. java继承总结_java继承总结(二)
  4. memory_buffer详解
  5. Python 简写操作(for、if简写、匿名函数)
  6. Spring注解和XML配置文件孰优孰劣
  7. rms 公式 有效值_有效值是电流电压的均方根值吗?
  8. oracle的一些操作
  9. java sql结果写入csv文件_java在处理大数据的时候一些小技巧
  10. VDI SolutionTrack - 上海站:11月20日
  11. java ,static
  12. Facebook vs Chrome 关公秦琼的未来之战,互联网营销
  13. funcode seafish
  14. PKPM结构设计软件案例教学
  15. [《雪的散文诗》小个子的诗集]2012年8月28日
  16. [艾兰岛]制作传送门之搭建系列——kura酱长期更新
  17. python能否取代excel_行,Python玩大了!​取代Excel,程序员:太牛!你怎么看?...
  18. Windows下显卡支持的cuda及配套GPU版本pytorch下载全流程(2022.03.27)
  19. Publish/SubScribe(发布/订阅)模式
  20. 热修复——深入浅出原理与实现

热门文章

  1. Windows Phone 7 定义和使用字典资源(ResourceDictionary)
  2. 4408: [Fjoi 2016]神秘数
  3. SqlServer系列笔记——数据类型转换
  4. iOS 开发-单元测试
  5. 关闭Xcode警告 (强迫症还在等什么!)
  6. ios8改变statusBar字体的显示颜色
  7. linux有关信号的FAQ
  8. DHCP服务器在企业里的各种应用方案
  9. 数据链路层(2层)数据帧结构
  10. Corba传值包含中文解决