π框架之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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏狮乐园

在 redux 中集成 angular di 机制

最近一直在折腾redux相关的东西,算然说官方鼓励的使用方式是将redux和react一起使用,但并不影响我们在其他的mvvm框架中使用它。

1083
来自专栏Netkiller

分布式计划任务设计与实现

分布式计划任务设计与实现 摘要 本文主要通过分布式计划任务软件设计讲述分布式软件开发。 我的系列文档 Netkiller Architect 手札 Netk...

2985
来自专栏PHP在线

文件缓存介绍

随着网络的发展,数据越来越多,从而导致运算压力越来越大。为了解决这一问题,就需要合理分配资源,充分利用已有资源,缓存的工作实际就是资源的合理分配。 在w...

3499
来自专栏Netkiller

分布式计划任务设计与实现

分布式计划任务设计与实现 目录 1. 什么是分布式计划任务 2. 为什么采用分布式计划任务 3. 何时使用分布式计划任务 4. 分布式计划任务的部署 5. 谁来...

3927
来自专栏jojo的技术小屋

原 微信授权和朋友圈分享

作者:汪娇娇 日期:2016.9.25 现在想想,微信这东西真是让人又爱又恨,刚接触的时候,简直毫无头绪,不过在后台的配合下,现在终于能八九不离十的将微信获取用...

5525
来自专栏喵了个咪的博客空间

phalapi-进阶篇4(notrom进阶以及事务操作)

#phalapi-进阶篇4(notrom进阶以及事务操作)# ? ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的...

3246
来自专栏芋道源码1024

小谈 Java 单元测试

总之有无数种理由不想写UT,作为工作不到三年的菜鸟深有体会。之前在点评工作的时候,团队的“UT”都集中于RPC的服务端。为啥带双引号? 因为RPC的服务端没有页...

1083
来自专栏星流全栈

dva - React + Redux, but like elm

1274
来自专栏IT米粉

Redis常见的应用场景解析

Redis是一个key-value存储系统,现在在各种系统中的使用越来越多,大部分情况下是因为其高性能的特性,被当做缓存使用,这里介绍下Redis经常遇到的使用...

3596
来自专栏玉树芝兰

如何用 pipenv 克隆 Python 教程代码运行环境?(含视频讲解)

咱们的 Python 教程代码已经可以免安装在线运行了。但如果你希望在本地克隆运行环境,请参考本文的步骤说明。

1013

扫码关注云+社区