1. Api+Domain+Model

其实这样的三层结构和java中的web+service+dao比较像,和我们平常所说的MVC开发模式也是非常想象。只是说web和api一个进行页面显示一个不进行页面显示这个区别,本博文主要着重讲一下这三层在Phalapi中分工是怎么样的,他们分别担当者什么样的角色,需要做什么样的事情。

1.1 Api层

为什么说Api层像java中的web层呢,因为他们有一个共同的特性就是接受请求和返回结果。只不过java中没有表现得那么强烈,它会通过控制器把请求转发到service层作处理,并将处理结果在页面展示,所以Api更像担当控制器(C)的作用。

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

a. 注册接口/定义接口和控制请求参数

这是首先要做的事情,和在web中的url一样,就是添加需要接受的参数以及对参数进行验证,如下:

public function getRules(){return array('goodsCategoryList' => array('parent_id' => array('name' => 'parent_id','type'=>'int', 'default' => '0','desc'=>'父类id'),),'goodsSecAndThirdCategoryList' => array('parent_id' => array('name' => 'parent_id','type'=>'int', 'require' => true,'desc'=>'父类id'),),);
}

b. 进行业务、逻辑的拼接

在这里进行业务、逻辑拼接,比如说是查询商品分类列表(依查询商品为例)接口需要做两件事情,第一查询出商品的分类列表信息,第二查询把查询出的信息进行 返回,应该是如下样式:

   /*** 获取商品分类列表* @desc 用于获取商品分类列表* @return int ret 返回接口状态码,其中:200成功,400非法请求,500服务器错误* @return int code 返回请求状态码,其中:1正常,0不正常* @return array data 返回数据信息* @return int id 商品分类id* @return string name 商品分类名称* @return string mobile_name 手机端显示商品分类名* @return int parent_id 父类id* @return srting parent_id_path 家族图谱* @return int level 分类等级* @return int sort_order 顺序显示* @return int is_show 是否显示,其中1显示,0不显示* @return string image 分类图片路径* @return int is_hot 是否推荐为热门分类,其中1为推荐,0为不推荐* @return int cat_group 分类分组默认0* @return int commission_rate 分佣比例* @return string msg 返回信息提示,成功:success,失败:error* @demo http://localhost/Api/Public/tpshop/index.php?service=Goods.goodsCategoryList*/public function goodsCategoryList(){$goods_domain = new Domain_Goods();$info = $goods_domain->goodsCategoryList($this->parent_id);return $info;}

1.2 Domain层

Domain层主要负责的是具体的业务实现,如数据获取,一个Domain方法就是一个小的业务具体实现(注意尽量把业务划分得细一点方便通用)

public function goodsCategoryList($parent_id){$goods_model = new Model_Goods();$result = $goods_model->goodsCategoryList($parent_id);return $result;}

1.3 Model层

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

 public function goodsCategoryList($parent_id){$goods_model = DI()->notorm->goods_category;$goodsCategoryList = $goods_model->where("parent_id = $parent_id AND is_show=1")->order("parent_id_path,sort_order desc")->fetchRows();if(!empty($goodsCategoryList)){$info['code'] = 1;$info['data'] = $goodsCategoryList;$info['msg'] = 'success';}else {$info['code'] = 0;$info['msg'] = 'error';}return $info;}

2. 三层结合使用的好处

2.1 结构清晰,互不干扰

就我个人感觉来说,在实际开发中使用这样的三层结构带来的最大的好处在于结构清晰,为什么这么说呢?因为每一层需要做的事情都是非常独立的,你永远不会在A PI层中看到数据操作的代码,所以在排查问题的时候,如果是数据出了问题,肯定不会去API层里面去找,这样就非常方便错误的定位,再者就是代码可读性非常高,相对 于mvc框架来说这样的好处是非常明显的。

2.2 高度解耦,灵活高可用

带来的第二个很重要的好处就是解耦和高可用,高可用体现在Api可以重复利用Domain,Domain可以重复利用Model,这样可以减少很多不必要的代码量。如果相互 的关系仅仅只是拼接(除非是结果会互相影响)的情况下就实现了解耦。

2.3 分工合作,提高效率

在有这样的一套规范之后在分工合用时,对方不需要去看你的代码具体实现了什么,只需要看你这个方法干了什么,直接拿起来用就可以了,当然是在业务划分成小块 的情况下,而且可以很明确的划分出来模块,当你需要用到对方的模块的时候只需要让对方提供即可,这样可以增加模块的专注性,从而提高合作开发的效率。

3. 总结

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

如何深入理解PhalApi框架三层结构Api+Domain+Model模式相关推荐

  1. 一. 弹幕框架三层结构

    文章目录 摘要 游戏要素分析 行为接口 对象池技术 弹幕框架三层结构 摘要 本文主要讲解用于Unity开发2D弹幕游戏的个人向的简单框架的设计结构及其思想. 在本文中将会讲解到对象池.接口等要素 游戏 ...

  2. 简单理解SpringMVC的三层结构顺序MCV以及ModelAndView的使用

    MVC三层结构 (M->C->V) requset–>中心总控制器(DispatcherServlet) 中心控制器接收到用户请求后:将请求转发到HandlerMapping (方法 ...

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

    2019独角兽企业重金招聘Python工程师标准>>> #phalapi-进阶篇1(Api,Domain,和Model)# ##前言## 先在这里感谢phalapi框架创始人@dog ...

  4. php调用好单库api视频教程,[8.1]-PhalApi视频教程 | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...

    [8.1] PhalApi视频教程 先在这里感谢以下录制小组的同学,是你们让世界看到PhalApi的视频教程! A西瓜妹子.听风不语.彩色的雨.Catch.喵了个咪.dogstar PhalApi教程 ...

  5. php api 无符号整数基数为16的整数参数的字符串表示形式,[1.12]-参数规则:接口参数规则配置 | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...

    "播下一种思想,收获一种行为:播下一种行为,收获一种习惯:播下一种习惯,收获一种性格:播下一种性格,收获一种命运." --<成君忆:水煮三国> 1.12.1 参数解析 ...

  6. [转]MVP+WCF+三层结构搭建项目框架

    最近,我一直在重构之前做的一个项目,在这个过程中感慨万千.原先的项目是一个运用了WCF的C/S系统,在客户端运用了MVC模式,但MVC的View.Model耦合以及WCF端分布式欠佳等问题让我有了重构 ...

  7. MVP+WCF+三层结构搭建项目框架(上)

    最近,我一直在重构之前做的一个项目,在这个过程中感慨万千.原先的项目是一个运用了WCF的C/S系统,在客户端运用了MVC模式,但MVC的View.Model耦合以及WCF端分布式欠佳等问题让我有了重构 ...

  8. 理解ASP.NET中的三层结构

    理解ASP.NET中的三层结构 我们用三层结构主要是使项目结构更清楚,分工更明确,有利于后期的维护和升级. 三层结构包含:表示层(USL),业务逻辑层(BLL),数据访问层(DAL) 1:数据访问层: ...

  9. ISP三层结构的理解(计算机网络)

    ISP三层结构的理解(计算机网络) 首先要理解ISP的中心目标:使所有端系统能够彼此发送分组 接入ISPs相应的必须是互联的, 因此任何2个端系统可相互发送分组到对方-->导致的"网络 ...

最新文章

  1. Leetcode | Binary Tree Maximum Path Sum
  2. 《程序是怎样跑起来的》第四章
  3. 如何在家写出一份无懈可击的产品文档
  4. 【数据竞赛】“达观杯”文本智能处理挑战赛6——模型优化
  5. 十四、中文词向量训练一
  6. 【Hibernate】HibernateCallback总结
  7. HDU多校2 - 6767 New Equipments(最小费用最大流)
  8. 不会真的有人拿了上万甚至几十万在网络上赌博吧?
  9. vue2.0 element学习
  10. jasperprint java_jasperReport的一些参数
  11. amd玄冰400怎么拆图解_【装机帮扶站】第735期:“无货”当道的京东年底大预售来了(AMD篇)...
  12. 高斯核函数 python实现
  13. 计算机if函数的作用,if函数的使用方法
  14. 适用于macOS 10.15系统的暗黑破坏神2 mac版
  15. php压力比例混合器图片,教你认识各种泡沫比例混合器
  16. 【pwn】长安杯baigei
  17. 云客服让每一个企业客户都成为座上宾
  18. win11磁盘分区怎么分?手把手教会你
  19. Qt QSqlQueryModel实现查询数据库内容
  20. qq侧滑界面的实现(DreawerLayout)

热门文章

  1. iphone型号表_历代iphone上市时间表(iphone所有型号上市顺序)
  2. 生产级搭建openresty+waf防火墙
  3. LeetCode55跳跃游戏//力扣55跳跃游戏(贪心)
  4. php获取汉字的首字母,php获取汉字拼音首字母的方法
  5. 大容量U盘制作USB多重系统启动盘初探
  6. 关于(求和符号∑)不可不知的事情
  7. VS 2019 C++ 如何在非控制台程序中打开控制台
  8. vmware16中win7虚拟机怎么设置全屏显示
  9. 【Codecs系列】双帧参考特性
  10. Scrapy爬虫框架,爬取小说网的所有小说