JavaScript设计模式-MVC模式(6)

简介: JavaScript设计模式-MVC模式(6)

MVC设计模式是使用业务逻辑和数据以及视图进行分离的方式来组织代码架构的一种模式,我们平常写功能的时候都会把业务逻辑视图以及数据写在一起,在功能比较复杂的情况下后期代码会比较难以维护,这个时候就可以采用MVC设计模式进行改善这种情况

MVC设计模式是由三个单词的首字母组成的,分别代表着三个东西:模型(Model),视图(View),控制器(controller)

image.png

View层:指的是我们页面显示的内容

Model层:指的是我们所需要的数据,并且提供一些方法,使我们可以去操作这些数据

Controller层:指的是我们编写的代码逻辑

我们在View层被用户操作后做出响应事件,这些事件就会传到 Controller层,Controller层会去通过Model层提供的方法改变数据,Model层改变完数据之后,就会把数据在发送到View层,View层接收到数据后会做出对应的视图渲染

在实际开发中,用户也可以对这三个东西进行分别操作以及单独操作某一个,无论操作怎么改变,但是唯一不变的就是MVC设计模式的分层,每层即是相互独立的,也可以产生一些交互

MVC小实践


我们拥有一组学生数据,希望把学生名字和学生年龄显示在页面中进行查看,并且可以更新学生数据

实现思路


我们先在页面上新建一个存储模板的盒子,然后再使用MVC设计模式思想进行控制模板渲染

<div id="app"></div>

声明一个MVC操作对象,存储了model和view以及controller的操作

let MVC = {};

model层


model层主要用于存放数据和对数据操作的方法,我们这里来声明一组学生数据,和对学生数据的读取以及添加和修改

MVC.model = (function () {
            // 数据
            let data = {
                people: [{ name: '若水', age: 21 },
                { name: '牛牛', age: 20 },
                { name: '菜菜', age: 19 }]
            }
                ;
            // 方法
            return {
                // 获取属性
                getData(key) {
                    console.log(key);
                    return data[key];
                },
                // 设置属性
                setData(key, val) {
                    data[key] = val
                }
            }
        })();

view层


视图层主要放了对视图的模板以及对模板调用的方法,完成对页面的内容的添加以及渲染

MVC.view = (function () {
            //获取到model层
            const model = MVC.model;
            let view = {
                // 创建模板
                crrateTemplte() {
                    let data = model.getData('people');
                    let html = ``;
                    // 获取到参数进行模板拼接
                    data.map(res => {
                        html += `<div>我的名字叫${res.name},今年${res.age}岁了</div>`
                    })
                    // 渲染视图
                   document.getElementById('app').innerHTML=html;
                }
            }
            //把渲染模板方法暴露出去
            return function (template) {
                view[template]();
            }
        })();

controller层


主要放了对view层以及model层的操作以及逻辑的处理,调用view模板方法进行渲染,并且可以对model层进行更新数据,对model层数据更新完成之后还需在调用view层的渲染方法进行视图渲染

//Controller层 
        MVC.controller = (function () {
        //获取model层
            const model = MVC.model;
            //获取view层
            const view = MVC.view;
            //逻辑层操作
            const controller = {
                // 渲染页面
                render() {
                    view('crrateTemplte')
                },
             // 更新数据
                updated() {
                    model.setData('people', [{ name: '明明', age: 2 },
                    { name: '红红', age: 10 },
                    { name: '烈烈', age: 9 }])
                    // 更新过后渲染页面
                    this.render()
                },
            }
            return controller;
        })();
            MVC.controller.render()

我们来给它添加一个更新的按钮

<button id="btn">更新数据</button>

最后直接在页面加载完之后在执行渲染视图方法以及给更新按钮添加方法,防止出现问题

window.onload = function () {
//视图渲染
            MVC.controller.render()
            //获取到更新按钮
            let btn = document.getElementById('btn');
         、//给更新按钮添加点击事件,点击就修改model层和更新视图
            btn.addEventListener('click', () => {
                MVC.controller.updated()
            }, false)
        }


image.png

相关文章
|
8天前
|
设计模式 Java 关系型数据库
设计模式:工厂方法模式(Factory Method)
工厂方法模式是一种创建型设计模式,通过将对象的创建延迟到子类实现解耦。其核心是抽象工厂声明工厂方法返回抽象产品,具体工厂重写该方法返回具体产品实例。适用于动态扩展产品类型、复杂创建逻辑和框架设计等场景,如日志记录器、数据库连接池等。优点包括符合开闭原则、解耦客户端与具体产品;缺点是可能增加类数量和复杂度。典型应用如Java集合框架、Spring BeanFactory等。
|
23天前
|
设计模式 JavaScript 算法
浅谈几种js设计模式
设计模式是软件开发中的宝贵工具,能够提高代码的可维护性和扩展性。通过单例模式、工厂模式、观察者模式和策略模式,我们可以解决不同场景下的实际问题,编写更加优雅和高效的代码。
28 8
|
2月前
|
设计模式 Java
「全网最细 + 实战源码案例」设计模式——生成器模式
生成器模式(Builder Pattern)是一种创建型设计模式,用于分步骤构建复杂对象。它允许用户通过控制对象构造的过程,定制对象的组成部分,而无需直接实例化细节。该模式特别适合构建具有多种配置的复杂对象。其结构包括抽象建造者、具体建造者、指挥者和产品角色。适用于需要创建复杂对象且对象由多个部分组成、构造过程需对外隐藏或分离表示与构造的场景。优点在于更好的控制、代码复用和解耦性;缺点是增加复杂性和不适合简单对象。实现时需定义建造者接口、具体建造者类、指挥者类及产品类。链式调用是常见应用方式之一。
64 12
|
2月前
|
设计模式
「全网最细 + 实战源码案例」设计模式——模式扩展(配置工厂)
该设计通过配置文件和反射机制动态选择具体工厂,减少硬编码依赖,提升系统灵活性和扩展性。配置文件解耦、反射创建对象,新增产品族无需修改客户端代码。示例中,`CoffeeFactory`类加载配置文件并使用反射生成咖啡对象,客户端调用时只需指定名称即可获取对应产品实例。
93 40
|
2月前
|
设计模式 关系型数据库
「全网最细 + 实战源码案例」设计模式——工厂方法模式
简单工厂模式是一种创建型设计模式,通过一个工厂类根据传入参数创建不同类型的产品对象,也称“静态工厂方法”模式。其结构包括工厂类、产品接口和具体产品类。适用于创建对象种类较少且调用者无需关心创建细节的场景。优点是封装性强、代码复用性好;缺点是扩展性差,增加新产品时需修改工厂类代码,违反开闭原则。
59 15
|
2月前
|
设计模式 关系型数据库
「全网最细 + 实战源码案例」设计模式——简单工厂模式
简单工厂模式是一种创建型设计模式,通过工厂类根据传入参数创建不同类型的对象,也称“静态工厂方法”模式。其结构包括工厂类、产品接口和具体产品类。优点是封装性强、代码复用性好;缺点是扩展性差,增加新产品时需修改工厂类代码,违反开闭原则。适用于对象种类较少且调用者无需关心创建细节的场景。
67 19
|
2月前
|
设计模式 数据安全/隐私保护
Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式
这篇文章介绍了在Next.js框架下,如何处理中后台管理系统中特殊页面(如登录页)不包裹根布局(RootLayout)的问题。作者指出Next.js的设计理念是通过布局的嵌套来创建复杂的页面结构,这虽然保持了代码的整洁和可维护性,但对于特殊页面来说,却造成了不必要的布局包裹。文章提出了一个解决方案,即通过判断页面的skipGlobalLayout属性来决定是否包含RootLayout,从而实现特殊页面不包裹根布局的目标。
119 33
|
3月前
|
设计模式 前端开发 搜索推荐
前端必须掌握的设计模式——模板模式
模板模式(Template Pattern)是一种行为型设计模式,父类定义固定流程和步骤顺序,子类通过继承并重写特定方法实现具体步骤。适用于具有固定结构或流程的场景,如组装汽车、包装礼物等。举例来说,公司年会节目征集时,蜘蛛侠定义了歌曲的四个步骤:前奏、主歌、副歌、结尾。金刚狼和绿巨人根据此模板设计各自的表演内容。通过抽象类定义通用逻辑,子类实现个性化行为,从而减少重复代码。模板模式还支持钩子方法,允许跳过某些步骤,增加灵活性。
174 11
|
4月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
65 2
|
4月前
|
设计模式 安全 Java
Kotlin - 改良设计模式 - 构建者模式
Kotlin - 改良设计模式 - 构建者模式

热门文章

最新文章