FleaPHP 开发指南 - 2. FleaPHP 中的 MVC 模式

2024-01-18 08:18
文章标签 模式 开发 指南 mvc fleaphp

本文主要是介绍FleaPHP 开发指南 - 2. FleaPHP 中的 MVC 模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

理解 FleaPHP 中,MVC 模式是如何实现的,以及其特点,可以帮助你更好的运用 FleaPHP。



什么叫做设计模式?

简单来说,设计模式(Pattern)就是解决某一类问题的特定方法。由于这种特定方法在解决同类问题时具有通用性,所以我们就可以一次又一次的利用已有的经验。具体到程序编写上,就是我们可以用类似的程序结构和代码解决同类型的问题。有关设计模式的详细内容,可以阅读经典著作《设计模式》,这里我就不班门弄斧了。

MVC 实际上是一系列略有不同的模式。FleaPHP 采用的是Passive(被动)MVC 模式。

在 Passive MVC 模式中,Model(模型)完全不知道自己身处于 MVC 结构之中。换句话说,Model 就是一个普通的对象,与 MVC 模式里面的其他组成部分完全没有关联。具体而言,MVC 模式涉及到下列三类对象:

  • M 代表 Model,即模型,用于封装与业务逻辑有关的代码和数据。例如对订单的各种计算。
  • V 代表 View,即视图,用于呈现内容给用户(也就是将程序运行的结果返回给浏览器显示)。例如商品列表页面、后台登录页面。
  • C 代表 Controller,即控制器,用于接收用户输入(通过浏览器发起的请求),然后调用模型(Model)对输入数据进行处理并获得处理结果。最后将结果传递到视图(View),从而让用户能够看到自己操作的结果。例如用户点击删除文章按钮后,控制器调用操作文章的模型,删除掉指定文章,最后通过视图显示成功删除文章的提示信息。

经过这样简单的分离,我们就把应用程序操作数据的代码(绝大部分 Web 应用程序都是对数据进行操作)和处理用户输入输出的代码分离开来了。

这种分离有许多好处:

  • 清晰的将应用程序分隔为独立的部分;
  • 业务逻辑代码能够很方便的在多处重复使用;
  • 方便开发人员分工协作;
  • 如果需要,可以方便开发人员对应用程序各个部分的代码进行测试。

如果你上面的文字让你觉得很无聊或者不够严谨,那么说明你已经很熟悉 MVC 模式了。如果你看到上面的文字感到无所适从,那说明你还需要多阅读一些面向对象相关的书籍和文档。



应用程序执行流程

下面的插图描述了基于 FleaPHP 应用程序的执行流程。

  1. index.php 是应用程序的入口文件,负责定义一些应用程序必须的常量,并载入 FleaPHP 框架,然后执行 run() 函数;
  2. 过滤器链完成 HTTP 请求数据解析、MagicQuotes 处理等工作;
  3. 应用程序控制根据 HTTP 请求,调用领域逻辑、表数据入口、组件等,并将处理结果传送到视图/模板;
  4. 视图/模板根据应用程序控制器提供的数据生成输出内容并传送到浏览器。

在 FleaPHP 中,index.php 里面的 run() 在调用过滤器链后,会运行一个调度器。该调度器根据 HTTP 请求参数决定要调用的应用程序控制器。例如 index.php?controller=blog&action=list 这个请求表示要调用名为 blog 的应用程序控制器的 list 动作。然后调度器会调用这个控制器的动作。

在 FleaPHP 应用程序中,控制器实现为一个类,控制器动作就是该类的一个方法。

在控制器(MVC 模式中的 Controller)方法中,通过调用领域逻辑代码(MVC 模式中的 Model)来处理 HTTP 请求提交的数据并获得结果。然后再将结果传递给视图(MVC 模式中的 View)。视图根据控制器方法提供的参数从模板文件构造最终的页面内容,并返回给浏览器。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1349949


这篇关于FleaPHP 开发指南 - 2. FleaPHP 中的 MVC 模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/618480

相关文章

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

在React中引入Tailwind CSS的完整指南

《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.