PHP搭建简单暴力的mvc
对于一个web系统来说,我们使用mvc很必要, 给我们带来的是清晰的结构,易运维,易扩展,
mvc 我对其的理解应该叫mxvc, 多了一个x , 这个x代表什么,x可以理解为 relay,proxy,adapter 亦可,
先来看下面这张图

这是我们系统的mxvc结构图, 大概分成四个部分,
第一部分 php-libs
这是提供mvc框架的底层库,这块需要注意的是这是一个和业务无关的代码模块,里面还有数据库封装类等, 我把数据库也画在
这个图中了,可以看出数据库的重要性,其实所有的web系统都是围绕着数据库增删改查上面的封装
把数据库画出来还有个重要的目地是告诉大家对数据的操作要入口唯一, 在我系统里面只有DAO
下面封装的类可以访问到数据库,入口的唯一虽然有短处,但是利大于弊,切记
第二部分 controller
我们先来说控制层,最后再说mx,
从系统结构上来说controller是接入层,这里面的类是相互独立的,也就是说我们在controller类里面写的方法,理论上只能被类自己的其他方法使用,所以写的每个方法都要考虑好,是不是应该放在这里面还是放在mx里面,我们要衡量好,同样功能的方法最好不要出现第二次,这里面的代码要很简洁,最好不要有太多的业务逻辑的处理,全部交给后端的逻辑层去处理,
第三部分 view
这里面也就是前端,静态文件css js pic 还有template 记住这里面的静态文件是不走后端业务逻辑的,用户可以直接访问的,所以要设计好你的文件夹结构, 哪些可以暴露,哪些不可以暴露
第四部分 mx 即model +x ( proxy/adapter/relay )
毋庸置疑这是你系统最重要的部分,心脏,
简单说一下我们的设计, 这里面有两个公用的文件夹,Service和Utils 他们分别放公共的服务类和工具类,
比如你的异常封装类和错误码都可以放在Service里面,utils下面比如你的getClientIp这样的方法可以放在这个下面
这里面的DAO可以看到所有数据库的封装类在这个下面都可以找到,而且出处唯一,只有这里面可以找到,基本上一个表对应一个类即一个文件, 这里面的文件比较简单就是数据库的增删改查,保证如果外面想对这个表操作只有通过这个类才可以实现
下面就是X 因为我们一个前端的请求可能需要多个表的结果,或者一个封装好的数据接口可以提供给上游好几个controller共用,
这个时候X的价值就体现出来了, 保证代码的简洁,提高代码的复用全靠这个层的代码了,更多的细节可以自己慢慢总结,
只要我们有清晰的逻辑设计,职责清晰,分工明确的代码,兵来将挡水来土掩,即使有大的改动也不怕
链接提供上面架构的php-libs : https://github.com/Allenhaozi/crab 供参考
PHP搭建简单暴力的mvc的更多相关文章
- 简单暴力的TP5多主题方案
一个小项目,需要配置多套前端主题.解决的思路是根据域名加载不同的主题配置. 一.在应用目录 application 下创建 common 目录. 二.application/common 目录下创建 ...
- 【Spring】搭建最简单的Spring MVC项目
每次需要Spring MVC的web项目测试一些东西时,都苦于手头上没有最简单的Spring MVC的web项目,现写一个. > 版本说明 首先要引入一些包,Spring的IOC.MVC包就不用 ...
- [angularjs] MVC + Web API + AngularJs 搭建简单的 CURD 框架
MVC + Web API + AngularJs 搭建简单的 CURD 框架 GitHub 地址:https://github.com/liqingwen2015/Wen.MvcSinglePage ...
- 【Spring】简单的Spring MVC入门例子
前言 测试特性需要搭建一个简单的Spring MVC的例子,遂记录之,只是例子,只为入门者之示例. 版本说明 声明POM文件,指定需引入的JAR. <properties> <spr ...
- maven/eclipse搭建ssm(spring+spring mvc+mybatis)
maven/eclipse搭建ssm(spring+spring mvc+mybatis) 前言 本文旨在利用maven搭建ssm环境,而关于maven的具体内容,大家可以去阅读<Maven 实 ...
- SpringMVC笔记——SSM框架搭建简单实例
落叶枫桥 博客园 首页 新随笔 联系 订阅 管理 SpringMVC笔记——SSM框架搭建简单实例 简介 Spring+SpringMVC+MyBatis框架(SSM)是比较热门的中小型企业级项目开发 ...
- 树莓派(Raspberry Pi)搭建简单的lamp服务
树莓派(Raspberry Pi)搭建简单的lamp服务: 1. LAMP 的安装 sudo apt-get install apache2 mysql-server mysql-client php ...
- 传智播客JavaWeb day07、day08-自定义标签(传统标签和简单标签)、mvc设计模式、用户注册登录注销
第七天的课程主要是讲了自定义标签.简单介绍了mvc设计模式.然后做了案例 1. 自定义标签 1.1 为什么要有自定义标签 前面所说的EL.JSTL等技术都是为了提高jsp的可读性.可维护性.方便性而取 ...
- Node.js简单介绍并实现一个简单的Web MVC框架
编号:1018时间:2016年6月13日16:06:41功能:Node.js简单介绍并实现一个简单的Web MVC框架URL :https://cnodejs.org/topic/4f16442cca ...
随机推荐
- hibou 主界面自己侧滑的定义
要打滑View参加UIPanGestureRecognizer #pragma mark 手势识别器回调方法 - (void)dragView:(UIPanGestureRecognizer *)ge ...
- Google C++ style guide——头文件
1.#define保护 使用#define防止头文件被多重包括.命名格式为:<PROJECT>_<PATH>_<FILE>_H_ 比如,foo中的头文件foo/sr ...
- 绿色mysql启动脚本
启动脚本如下:./mysqld_safe --defaults-file=/export/servers/mysql-5.5.38/my.cnf --ledir=/export/servers/mys ...
- 安卓开发之RecyclerView
RecyclerView是一个非常好用的控件,它的效果和ListView很相似,甚至可以说RecyclerView的出现是来取代ListView的 RecyclerView比ListView更加灵活, ...
- <转>泛型的内部原理:类型擦除以及类型擦除带来的问题
参考:java核心技术 一.Java泛型的实现方法:类型擦除 前面已经说了,Java的泛型是伪泛型.为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉.正确理解泛型概念的首 ...
- linux下socket编程-TCP
网络字节序 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出,接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存,因此,网络数据流的地址应这样规定:先发出 ...
- WireShark抓包软件的使用
在大学的时候学习的计算机网络的具体的知识,也使用过wireshark去抓取一些网络的封包用来分析,但是都没能系统的写一篇博客,今天总结一下吧. wireshark介绍 wireshark的官方下载网站 ...
- Java log4j的环境搭建
一.Log4j是什么? Log4j是Apache的一个开源代码项目,通过使用Log4j,我们可以控制日志信息输出的目的地.最常见的就是输出到控制台或者日志文件.同时,它强大的一点是可以在C.C++等其 ...
- DBubtil的使用
1.什么是O-R Mapping(对象-关系映射) 常用O-R Mapping映射工具 Hibernate(全自动框架) Ibatis(半自动框架/SQL) Commons DbUti ls(只是对J ...
- ubuntu mysql编码设置5.5以后
安装了mysql. 版本:5.5.28 操作系统 :ubuntu 12.10 mysql> show variables like 'character%'; +---------------- ...