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.
    }
}
相关推荐
YM52e7 小时前
鸿蒙 ArkTS 实战|网络常用漫剧主角名称分类表:26 位主角 8 大分类 + 搜索筛选
学习·华为·harmonyos
深蓝海拓8 小时前
基于QtPy (PySide6) 的PLC-HMI工程实战记录(五)为当前动作画面的信号连接变量
网络·笔记·python·学习·pyqt
云贝教育-郑老师8 小时前
Oracle 块清除(Block Cleanout):commit 之后,数据块里的“战场“谁来打扫?
数据库·学习·oracle
敢敢のwings9 小时前
世界模型与FlashWorld:从“在梦中学习“到秒级3D场景生成
android·学习·3d
那年窗外下的雪.9 小时前
AIDC 学习日志|第 14 天|MAC Flapping 与 EVPN 多归属分层排障
网络·git·学习·macos·github·spine
薛定e的猫咪9 小时前
(arXiv 2026)GLiBRL :可学习基函数的深度贝叶斯元强化学习 ----待补充
人工智能·深度学习·学习·算法·机器学习
sunshine22 girl9 小时前
Angular7,9,学习笔记一 创建项目,基本语法
笔记·学习
小雪崩9 小时前
嵌入式学习 day30:minilog
linux·c语言·学习
xiaoxiangsiyan10 小时前
现代大型虚拟化智慧园区整体架构EVPN‑VXLAN落地全解
运维·网络·学习·架构
mlidongfeng10 小时前
[AI][昇腾950]TP(Transport Layer,传输层)学习笔记
笔记·学习