π框架之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 条评论
登录 后参与评论

相关文章

来自专栏小程序·云开发

小程序云开发的认识

云开发提供的是JSON数据库,就是数据库中的每条记录都是一个JSON格式的对象。一个数据库可以有多个集合(一个集合就看做一个JSON数组,数组的,每一个对象就是...

720
来自专栏Python疯子

用Python调教微信,实现自动回复 和 微信好友分布,好友性别图,好友标签

微信自上线以来,一直没有自动回复的功能,想必是有他们的理念。但是有些人群,确实对此功能有一定需求,我举两个栗子:

815
来自专栏顶级程序员

写一个网页进度 loading

来自:简书 作者:jack_lo 原文:www.jianshu.com/p/4c93f5bd9861 loading随处可见,比如一个app经常会有下拉...

3469
来自专栏技术分享

.NET应用架构设计—用户端的防腐层作用及设计

阅读目录: 1.背景介绍 2.SOA架构下的显示端架构腐化 3.有效使用防腐层来隔离碎片服务导致显示端逻辑腐烂 4.剥离服务调用的技术组件让其依赖接口 ...

22310
来自专栏進无尽的文章

工具篇- FBMemoryProfiler 内存泄漏的自动化排查框架

应用开发到一定规模后,各种内存问题频频出现,还很难定位。你是否也体会过这种痛苦?随着我们工程的体量增长,代码结构变得越来越复杂。这时候很多内存问题就变得越来越难...

502
来自专栏Android-JessYan

一行代码实现Okhttp,Retrofit,Glide下载上传进度监听

原文地址: http://www.jianshu.com/p/5832c776621f qq群:301733278

742
来自专栏CSDN技术头条

和各种诡异 Bug 打交道 13 年,我总结了 18 条经验

作者 | Henrik Warne 翻译 | 郑芸 在《程序员,你会从 Bug 中学习么?》一文中,我写了我是怎样追踪这些年遇到的最有趣 bug 的。最近我重新...

2088
来自专栏我是攻城师

理解elasticsearch的parent-child关系

4196
来自专栏何俊林

Android Multimedia框架总结(十三)CodeC部分之OpenMAX框架初识及接口与适配层实现

前言:上篇中介绍OMX事件回调,从今天开始,走入Codec部分之OpenMAX框架里。看下今天的Agenda如下: 一张图回顾音视频同步 一张图看清OpenMA...

20010
来自专栏Timhbw博客

iOS面试中被面试官问到的问题答案(一)

2016-03-1016:30:14 发表评论 1,091℃热度 1.请你谈谈static和宏定义的区别。什么时候用static什么时候用宏定义。 让你声...

3918

扫描关注云+社区