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

相关文章
|
2月前
|
设计模式 前端开发 搜索推荐
前端必须掌握的设计模式——模板模式
模板模式(Template Pattern)是一种行为型设计模式,父类定义固定流程和步骤顺序,子类通过继承并重写特定方法实现具体步骤。适用于具有固定结构或流程的场景,如组装汽车、包装礼物等。举例来说,公司年会节目征集时,蜘蛛侠定义了歌曲的四个步骤:前奏、主歌、副歌、结尾。金刚狼和绿巨人根据此模板设计各自的表演内容。通过抽象类定义通用逻辑,子类实现个性化行为,从而减少重复代码。模板模式还支持钩子方法,允许跳过某些步骤,增加灵活性。
142 11
|
13天前
|
JavaScript 前端开发 Docker
如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。
72 44
|
3月前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
26天前
|
设计模式
「全网最细 + 实战源码案例」设计模式——模式扩展(配置工厂)
该设计通过配置文件和反射机制动态选择具体工厂,减少硬编码依赖,提升系统灵活性和扩展性。配置文件解耦、反射创建对象,新增产品族无需修改客户端代码。示例中,`CoffeeFactory`类加载配置文件并使用反射生成咖啡对象,客户端调用时只需指定名称即可获取对应产品实例。
88 40
|
27天前
|
设计模式 关系型数据库
「全网最细 + 实战源码案例」设计模式——简单工厂模式
简单工厂模式是一种创建型设计模式,通过工厂类根据传入参数创建不同类型的对象,也称“静态工厂方法”模式。其结构包括工厂类、产品接口和具体产品类。优点是封装性强、代码复用性好;缺点是扩展性差,增加新产品时需修改工厂类代码,违反开闭原则。适用于对象种类较少且调用者无需关心创建细节的场景。
54 19
|
1月前
|
设计模式 数据安全/隐私保护
Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式
这篇文章介绍了在Next.js框架下,如何处理中后台管理系统中特殊页面(如登录页)不包裹根布局(RootLayout)的问题。作者指出Next.js的设计理念是通过布局的嵌套来创建复杂的页面结构,这虽然保持了代码的整洁和可维护性,但对于特殊页面来说,却造成了不必要的布局包裹。文章提出了一个解决方案,即通过判断页面的skipGlobalLayout属性来决定是否包含RootLayout,从而实现特殊页面不包裹根布局的目标。
90 33
|
25天前
|
设计模式 Java
「全网最细 + 实战源码案例」设计模式——生成器模式
生成器模式(Builder Pattern)是一种创建型设计模式,用于分步骤构建复杂对象。它允许用户通过控制对象构造的过程,定制对象的组成部分,而无需直接实例化细节。该模式特别适合构建具有多种配置的复杂对象。其结构包括抽象建造者、具体建造者、指挥者和产品角色。适用于需要创建复杂对象且对象由多个部分组成、构造过程需对外隐藏或分离表示与构造的场景。优点在于更好的控制、代码复用和解耦性;缺点是增加复杂性和不适合简单对象。实现时需定义建造者接口、具体建造者类、指挥者类及产品类。链式调用是常见应用方式之一。
53 12
|
27天前
|
设计模式 关系型数据库
「全网最细 + 实战源码案例」设计模式——工厂方法模式
简单工厂模式是一种创建型设计模式,通过一个工厂类根据传入参数创建不同类型的产品对象,也称“静态工厂方法”模式。其结构包括工厂类、产品接口和具体产品类。适用于创建对象种类较少且调用者无需关心创建细节的场景。优点是封装性强、代码复用性好;缺点是扩展性差,增加新产品时需修改工厂类代码,违反开闭原则。
45 15
|
3月前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
2月前
Next.js 实战 (三):优雅的实现暗黑主题模式
这篇文章介绍了在Next.js中实现暗黑模式的具体步骤。首先,需要安装next-themes库。然后,在/components/ThemeProvider/index.tsx文件中新增ThemeProvider组件,并在/app/layout.tsx文件中注入该组件。如果想要加入过渡动画,可以修改代码实现主题切换时的动画效果。最后,需要在需要的位置引入ThemeModeButton组件,实现暗黑模式的切换。

热门文章

最新文章