专栏首页程序员的碎碎念π框架之ADM分层架构

π框架之ADM分层架构

目录结构

phalapi 2.X版本与第一个版本在项目目录结构上有很大的差异,更面向自动化、国际化和流行化,学习起来更易懂。(前提是你理解了composer、命名空间和psr-4规范),今天主要带领大家理解一下ADM模式。

什么是ADM模式?

在传统Web框架中,惯用MVC模式。可以说,MVC模式是使用最为广泛的模式,但同时也可能是误解最多的模式。然而,接口服务这一领域,与传统的Web应用所面向的领域和需要解决的问题不同,最为明显的是接口服务领域中没有View视图。 π框架的开发团队在MVC模式的基础上去掉了View视图层,添加了Domain领域业务层。从而涌现了Api-Domain-Model模式,简称ADM模式。(来自开发文档)

Api接口服务层

Api接口层称为接口服务层,负责对客户端的请求进行响应,处理接收客户端传递的参数,进行高层决策并对领域业务层进行调度,最后将处理结果返回给客户端

实例:

红框:命名空间表示当前文件user.php在顶级命名空间App下的Api文件夹

顶级命名空间App可在根目录下的composer.json文件设置

黄框:接口参数规则配置,参数规则是针对各个接口服务而配置的多维规则数组,由接口类的getRules()方法返回。

(若未显示全,可右滑)
一维下标是接口类的方法名,对应接口服务的Action;
二维下标是类属性名称,对应在服务端获取通过验证和转换化的最终客户端参数;
三维下标name是接口参数名称,对应外部客户端请求时需要提供的参数名称。

接口参数及type类型请参考开发文档http://docs.phalapi.net/#/v2.0/api

篮框:Api下的方法login是接口服务名称,对接收数据进行处理,$this获取所有数据,可调用D层中方法,成功返回200,失败会返回提示状态码

实例:

这是用户注册的Api层:

Domain领域业务层

Domain层 负责对领域业务的规则处理,重点关注对数据的逻辑处理、转换和加工,封装并体现特定领域业务的规则。 官方给出的建议是:

拥有良好的分层结构,学会它,在我们往后的代码管理中得到便利、开发更高效且让代码变得有趣起来。

实例

这是一个用户注册的Domain层:

Model数据模型层

Model层负责技术层面上对数据信息的提取、存储、更新和删除等操作,数据可来自内存,也可以来自持久化存储媒介,甚至可以是来自外部第三方系统。

学过thinkphp5的人可以理解,运用m层对数据库进行操作会大大方便我们的开发。可参照开发文档学习http://docs.phalapi.net/#/v2.0/model

实例:

这是一个用户注册的Model层:

ADM调用关系图

在这里,小编对代码进行了部分注释,希望对大家的学习有所帮助,也希望有问题加我微信(wzc88czw)交流学习心得。

本文分享自微信公众号 - 程序员的碎碎念(gh_53e607dd4782),作者:benny

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-02-05

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • π框架从入门到放弃

    什么是π框架? 全称Phalapi,是一个PHP轻量级开源接口框架,以下是他的优点: 免费:最好的往往是免费的; 不断更新:15年发布,到现在不断的更新和完善,...

    benny
  • LeeCode 每日一题121:股票卖出的最佳时机

    首先来看看暴力解决这道题的算法,以类似冒泡算法的方式,两层遍历整个数组确定最大利润, 这种方式最蠢, 最容易想到. 在 LeeCode 中, C语言凭借更好的性...

    benny
  • git如何使用ssh密钥

    首先先来了解一下git的四种传输协议:本地、ssh、git和http,http协议应该说是最常见的一种,因为简单,以下是各个协议的优点与缺点:

    benny
  • 计算机网络之数据链路层1 链路层概述4 交换局域网5 交换机(switch)

    JavaEdge
  • Golang并发模型:select进阶

    前一篇文章《Golang并发模型:轻松入门select》介绍了select的作用和它的基本用法,这次介绍它的3个进阶特性。

    大彬
  • Django入门:搭建你第一个应用

    Django是用Python编写的免费开源Web框架,用了MVC的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内...

    司徒永哥
  • 交换机如何碾压集线器?

    集线器(Hub)这个“笨蛋”统治我们的局域网已经有好几年了,我们都敢怒而不敢言。

    用户1260737
  • 特征归一化:Why?How?When?

    在使用某些算法时,特征缩放可能会使结果发生很大变化,而在其他算法中影响很小或没有影响。为了理解这一点,让我们看看为什么需要特征缩放、各种缩放方法以及什么时候应该...

    量化投资与机器学习微信公众号
  • AngularDart4.0 指南 原

          本文档为Angular的高级部分,如果你刚接触Angular,请先学习Angular。

    南郭先生
  • 如何有效地做算法题

    这篇文章最早发在我团队的文档中。我的团队鼓励每个同学都在业余时间多做算法题,特别是新人。个人认为在编程能力的提升上比做 side project 更有用,对职业...

    芋道源码

扫码关注云+社区

领取腾讯云代金券