【10月进步一点点】1.单个文件的MVC实现-代码分离

文章目录

    • 原生PHP程序
    • 分离HTML
        • 逻辑和视图分离
        • 控制器 / 引擎角色
    • 分离逻辑代码中的应用部分
    • 参考
    • 补充
        • Model 模型

原生PHP程序

实现SQL-Labs第一关的功能,后台PHP需要成的工作大概如下:

  1. 接收请求数据
  2. 连接数据库并查询数据
  3. 接收查询结果
  4. 前端展示查询结果

index.php 源码文件不仅包含两种编程语言,还包含多种功能。对于规模稍大的项目,这样的写法会给开发者带来很多问题,比如:

  1. 没有错误检测:比如上面的连接数据库代码, 如果连不上了怎么办?
  2. 糟糕的代码组织,:网站规模扩大的时候,单个文件变的没有办法维护, 你在哪里写代码来接收表单数据? 你怎么验证数据? 你在哪里发送邮件?
  3. 代码重用性为零:当所有的东西都在一个文件里面时, 博客的其它部分没有办法使用当前的代码

分离HTML

前端html主要用于展示,与后端逻辑程序有本质区别,所以考虑把视图和逻辑代码分离。

逻辑和视图分离

index.php 文件用来连接数据库并查询数据,通过包含 view.php 前端代码文件来展示数据 。

连接数据库和获取数据的逻辑和HTML分开了. 有的时候你可能要返回的是其它格式的数据, 比如说json格式的和xml格式的, 你只需要更换模板就可以了. 而不用动控制器里的逻辑代码.

控制器 / 引擎角色

按照惯例, index.php 文件包含了所有的逻辑代码, 被称为”控制器”. 不管你用什么编程语言, 什么框架.,“控制器”这个术语你可以听了N遍了. 它处理所有的输入和预处理所有的输出. (预处理的意思是绑定数据和指定输出模板)

分离逻辑代码中的应用部分

站点不止 index.php 这一个页面, 其它的页面也要用到数据库连接怎么办? 也要用到查询出来的数据怎么办? 复制粘贴? 不, 尝试分离这些公共的东西, 把它们放到另一个文件中。

数据库连接的逻辑代码被分离到 model 层,这部分被叫做业务逻辑。

现在控制器将变得十分简洁,比如下面代码。此时控制器的唯一任务,就是从model层获取数据, 然后调用模板(view层)来渲染数据, 这就是简单的MVC实现。

require_once 'model.php';

$posts = get_all_posts();

require 'templates/list.php';

参考

全文参考 Symfony 系列之为什么要使用MVC,讲解得很清晰,本文只是用个人的理解进行了二次表达。

补充

Model 模型

模型 Model 表示业务数据,比如数据库中的数据,并把业务数据提供给视图。

在 《Symfony 权威指南》中,MVC架构被翻译为 业务规则、服务逻辑和表现页面。

参考:

  • 模型 视图 控制器
  • 《Symfony 权威指南》第一章

你可能感兴趣的:(PHP代码审计,mvc,php,数据库)