MVC与设计模式理解-lnmp学习之路

一、MVC

前言:

        MVC是一种应用架构模式,也可以说是一种业务架构或是一种应用设计思想,用于组织业务逻辑并分离代码的。
        MVC组成结构是Model-View-Controller,Model是管控数据层,View是管控视图层,Controller是管控业务逻辑层。

举例:

        例如后台管理系统:用户通过域名访问,控制层(Controller)收到信号后会去查找用户登录标识,如果用户没有登录,会告诉视图层(View),展示登录页面,让用户登录。

        例如还是后台管理系统:用户登录后台管理系统,添加后台管理员账号及密码,后台管理员能看到添加的管理员账号。

二、设计模式

        前言:

                设计模式是一套指导原则,用来指导开发者组织代码结构的,以便于更好的应对业务变化及提高代码的可维护性。
                设计模式通常具备以下特点:
                1、重用性:在特定的场景下,设计模式可以被重复使用,对相同类型不同问题的环境,其解决方案都有效‌
                2、灵活性:可以根据具体的需求和条件进行调整和变化,以满足特定的开发需求‌
                3、维护性:提供了一种标准化的解决方案
                4、扩展性:支持软件的未来发展和变化,使得软件更容易适应新的需求和变化‌

        举例:

                例如我们常见的线下活动:签到、答题、抽奖等,利用工厂模式
abstract class TemplateHandle
{/*** 获取模板信息* User: 龙哥·三年风水* Date: 2024/8/27* Time: 9:44* @ param $id* @ return mixed*/protected abstract function getTemplate($id);/*** 保存模板* User: 龙哥·三年风水* Date: 2024/8/27* Time: 9:43* @ param $param* @ return mixed*/protected abstract function saveTemplate($param);
}
class TemplateFactory
{protected static $instance = null;//缓存实例protected $channelType = 0;//通道类型//初始化参数public function __construct($type){$this->channelType = $type;}//选择通道public function templateHandle(){switch ((int)$this->channelType){case 1:// 答题模板self::$instance = new Answer();break;case 2:self::$instance = new Pic();break;case 3:self::$instance = new Other();break;case 4:break;default:self::$instance = null;throw new BaseError("未设置任何通道",50000,200);break;}return self::$instance;}
}
class Pic extends TemplateHandle
{/*** 初始化* User: 龙哥·三年风水* Date: 2024/8/27* Time: 9:44* Pic constructor.*/public function __construct(){}/*** 获取模板信息* User: 龙哥·三年风水* Date: 2024/8/27* Time: 9:44* @ param $id* @ return mixed*/public function getTemplate($id){// TODO: Implement getTemplate() method.}/*** 保存模板* User: 龙哥·三年风水* Date: 2024/8/27* Time: 9:43* @ param $param* @ return mixed*/public function saveTemplate($param){// TODO: Implement saveTemplate() method.}
}
class Answer extends TemplateHandle
{/*** 初始化* User: 龙哥·三年风水* Date: 2024/8/27* Time: 9:44* Pic constructor.*/public function __construct(){}/*** 获取模板信息* User: 龙哥·三年风水* Date: 2024/8/27* Time: 9:44* @ param $id* @ return mixed*/public function getTemplate($id){// TODO: Implement getTemplate() method.}/*** 保存模板* User: 龙哥·三年风水* Date: 2024/8/27* Time: 9:43* @ param $param* @ return mixed*/public function saveTemplate($param){// TODO: Implement saveTemplate() method.}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/412200.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于矢量光场的光学加工技术

欢迎关注GZH《光场视觉》 摘要:作为光的一个基本属性,偏振、振幅和相位提供的自由度对光场调控具有重要作用。具有空间结构偏振态、振幅和相位分布的矢量光场因其具有不同于传统光场的独特性质而被应用于诸多领域。近年来,时空分布特性更加丰…

合宙LuatOS开发板使用手册——Air700EAQ

EVB-Air700EL&700EY 开发板是合宙通信推出的基于 Air700EL&700EY 模组所开发的, 包含电源,SIM 卡,USB,PCB 天线等必要功能的最小硬件系统。 以方便用户在设计前期对 模块进 行性能评估,功能调试,软…

“面试宝典:高频算法题目详解与总结”

干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…

JavaScript 的进阶概念补充:V8 引擎的垃圾回收机制

JavaScript 的进阶概念补充:V8 引擎的垃圾回收机制 JavaScript 的垃圾回收机制在各大浏览器中实现有所不同,其中 V8 引擎(Google Chrome 和 Node.js 中使用的 JavaScript 引擎)尤为知名。理解 V8 引擎的垃圾回收机制,…

Linux_kernel简介01

--------------------------------------------------------- 力扣专题 --------------------------------------------------------- 一、嵌入式开发 1、ARM的历史 ARM原本含义(Acom RISC Machine)后来Acron公司独立出了ARM部门,成立了ARM公司(Advan…

消费电子钛时代到来!天工股份抢占发展高地,业绩爆发式增长、前景广阔

消费电子“钛时代”正加速到来。 27日凌晨,苹果正式定档iPhone 16系列新品的发布会日期。据悉,本次iPhone 16 Pro系列将全系标配钛金属中框,继续沿用并升级此前在iPhone 15 Pro系列上应用的钛金属材质。 回看去年9月秋季新品发布会&#xf…

VIVADO自定义 IP封装

简介 本章节主要针对VIVAO 2020.2版本做IP自定义封装,其中涉及到IP寄存器读写配置,自定义接口封装等介绍。 IP封装 IP标准自定义步骤一般有创建工程,封装IP,自定义内容,添加自定义库这4个步骤,下面…

音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息

通过FFprobe命令可以显示WAV音频文件每个packet(也称为数据包或多媒体包)的信息: ffprobe -of json -show_packets XXX.wav 输出如下: 其中: 1.codec_type:packet类型,表示该路流是视频还是音…

《机器学习》 基于GANs构建数字图像生成器

文章目录 引言生成对抗网络的基本原理生成对抗网络的数学表达生成对抗网络的应用生成对抗网络的挑战与优化生成对抗网络的实现示例结论:机器学习和ai技术的出现成为了C……SD……N 热榜的爹。 使用机器学习技术对热榜文章进行分析 引言 生成对抗网络(Ge…

macos USB外接键盘ctrl键绑定方法 解决外接USB键盘与mac键盘不一致问题

mac电脑外接USB键盘后我们需要修改一下 ctrl键的绑定后才符合我们的使用习惯,因为标准USB键盘和mac键盘上面的ctrl键是不一样的, mac上面的 command 键 对应我们USB键盘上面的 ctrl 键. 修改方法: 偏好设置 --> 键盘 点击修饰键 后 选择键盘里面选择 USB键盘 ,然后调换…

鸿蒙( Beta5.0版)开发实战:自定义TabBar页签

介绍 本示例主要介绍了TabBar中间页面如何实现有一圈圆弧外轮廓以及TabBar页签被点击之后会改变图标显示,并有一小段动画效果。 效果图预览 使用说明: 依次点击tabBar页面,除了社区图标之外,其它图标往上移动一小段距离。 实现…

【SpringCloud应用框架】GateWay网关

Spring Cloud Alibaba 之初识GateWay网关 文章目录 一、网关介绍二、网关对比三、GateWay基本概念:执行流程: 总结 一、网关介绍 在微服务架构中,一个系统会被拆分为多个微服务。如果没有网关存在,我们只能在客户端记录梅哥为服务…

第138天:内网安全-WinLinux内存离线读取Hashcat 破解RDPSSH 存储提取

案例一: 明文获取-Windows-内存读取&离线读取&RDP保存&Hashcat windows实验背景 微软为了防止明文密码泄露发布了补丁 KB2871997 ,关闭了 Wdigest 功能。当系统为 win10 或 2012R2 以上时,默认在内存缓存中禁止保存明文密…

leetcode60.不同路径

题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示例 1: 输入:m = 3, n = 7 输出:28 示例 2:…

Mysql数据库当执行SQL响应比较慢,怎样排查及解决?

一 如果执行SQL响应比较慢,可能有以下四个原因: 1 没有索引或者是SOL没有命中索引,导致索引失效。 2 单表数据量过多,导致查询遇到瓶颈。 3 可能是网络原因,或者机器负载过高。 4 热点数据导致单点负载不均衡。 二 解…

11.STL

STL阶段 禁止复制 文本查询扩展作业解析 get_file函数的作用就是进行预处理操作&#xff0c;将文件中的每一行的内容放在shared_ptr<vector<string>> file里面进行存储&#xff1b;然后对每一个单词进行处理&#xff0c;将单词与行号放在map<string, shared_p…

linux 内核代码学习(七)

linux内核代码的研究中断了一段时间了&#xff0c;现在又重新开始了研究&#xff0c;个人觉得linux内核的学习是没有上限的&#xff0c;总是一个温故而知新的过程&#xff0c;是一个不断积累的过程。首先还是要先搭建一个方便自己学习和研究的平台&#xff0c;经过不断的尝试&a…

学习bat脚本

内容包含一些简单命令或小游戏&#xff0c;在乐趣中学习知识。 使用方法&#xff1a; 新建文本文档&#xff0c;将任选其一代码保存到文档中并保存为ASCII编码。将文件后缀改为.bat或.cmd双击运行即可。 一. 关机脚本 1. 直接关机 echo off shutdown -s -t 00秒直接关机。 2…

C语言 | Leetcode C语言题解之第383题赎金信

题目&#xff1a; 题解&#xff1a; bool canConstruct(char * ransomNote, char * magazine){int r strlen(ransomNote);//首先是我们的目标数组和我们的提供方数组长度int m strlen(magazine);if (r > m)return false;//如果提供的数量都不够补充目标&#xff0c;那肯定…

UE5开发——射击游戏

1. 枪支拾取动画 创建Text Block 编译保存 在h文件写入 &#xff0c;属性 private:UPROPETY(VisibleAnywhere, Category "Weapon Properties")class UWidgetComponent* PickupWidget; 先写这个&#xff1a; CreateDefaultSubobject<UWidgetComponent>(TEXT(…