`

前端中的MVC

    博客分类:
  • web
 
阅读更多
标签:

MVC是一种设计模式,它将应用划分为3个部分:数据(模型)、展现层(视图)和用户交互(控制器)。其中:

M - MODEL(模型)

V - VIEW(视图)

C - CONTROLLER(控制器)

一个事件的发生是这样的过程:
  1. 用户和应用产生交互。
  2. 控制器的事件处理器被触发。
  3. 控制器从模型中请求数据,并将其交给视图。
  4. 视图将数据呈现给用户。
不用类库或框架就可以实现这种MVC架构模式。关键是要将MVC的每部分按照职责进行划分,将代码清晰地分割为若干部分,并保持良好的解耦。这样可以对每个部分进行独立开发、测试和维护。

M-模型

  模型用来存放应用的所有数据对象。比如,可能有一个User模型,用以存放用户列表、他们的属性及所有与模型有关的逻辑。模型不必知道视图和控制器的逻辑。任何事件处理代码、视图模板,以及那些和模型无关的逻辑都应当隔离在模型之外。将模型的代码和视图的代码混在一起,是违反MVC架构原则的。模型是最应该从应用中解耦出来的部分。
当控制器从服务器抓取数据或创建新的记录时,它就将数据包装成模型实例。也就是说,我们的数据是面向对象的,任何定义在这个数据模型上的函数或逻辑都可以直接被调用。

V-视图

  视图层是呈现给用户的,用户与之产生交互。在JavaScript应用中,视图大都是由HTML、CSS、JavaScript模板组成的。除了模板中简单的条件语句之外,视图不应当包含任何其他逻辑。将逻辑混入视图之中是编程的大忌,这并不是说MVC不允许包含视觉呈现相关的逻辑,只要这部分逻辑没有定义在视图之内即可。我们将视觉呈现逻辑归类为“视图助手”(helper):和视图相关的独立的小工具函数。

C-控制器

  控制器是模型和视图之间的纽带。控制器从视图获取事件和输入,对它们(很可能包含模型)进行处理,并相应地更新视图。当页面加载时,控制器会给视图添加事件监听,比如监听表单提交或按钮点击。然后,当用户和你的应用产生交互时,控制器中的事件触发器就开始工作了。

  在网页交互中,可以这样理解:

1.用户点击了表格中的数据

2.触发了点击事件,数据变成可编辑的状态(这个时候会出现一个文本框,但是里面还没有数据)

3.第2步的点击事件从存放数据的模型中把数据放到文本框中,形成一种数据由不可编辑到可编辑的一种效果

举个例子:
<select id="drinkSelect">
    <option value="coffee">coffee</option>
    <option value="milk">milk</option>
    <option value="juice">juice</option>
</select>
<p id="theColorOfDrink"></p>

<script type="text/javascript">
document.getElementById("drinkSelect").onchange = function() {
    var color;
    var colorOfDrink = {
        "coffee":"brown",
        "milk":"white",
        "juice":"orange"
    };
    color = colorOfDrink[this.value];
    document.getElementById("theColorOfDrink").innerHTML = color;
}
</script>

上面程序会把选中的饮料的颜色显示出来,如果用MVC,就是这个样子:
<select id="drinkSelect">
    <option value="coffee">coffee</option>
    <option value="milk">milk</option>
    <option value="juice">juice</option>
</select>
<p id="theColorOfDrink"></p>

<script type="text/javascript">
//showDrinkColor is Controller
var showDrinkColor = {
    start:function(){
        this.view.start();
    },
    set:function(drinkName){
        this.model.setDrink(drinkName);
    }
};
//Model
showDrinkColor.model = {
    colorOfDrink:{
        "coffee":"brown",
        "milk":"white",
        "juice":"orange"
    },
    selectedDrink:null,
    setDrink:function(drinkName){
        this.selectedDrink = this.colorOfDrink[this.selectedDrink]?drinkName:null;
        this.onchange();
    },
    onchange:function(){
        showDrinkColor.view.update();
    },
    getDrinkColor:function(){
        return this.selectedDrink?this.colorOfDrink[this.selectedDrink]:"white";
    }
};
//View
showDrinkColor.view = {
    start:function(){
        document.getElementById("drinkSelect").onchange = this.onchange;
    },
    onchange:function(){
        showDrinkColor.set(document.getElementById("drinkSelect").value);
    },
    update:function(){
        document.getElementById("theColorOfDrink").innerHTML = showDrinkColor.model.getDrinkColor();
    }
};
showDrinkColor.start();
</script>

         进行分层之后,各个层次的功能清晰:V层控制界面显示,将界面与数据连接;M层存放数据,处理逻辑,C层用于连接M和V,但是,代码变复杂了。的确,层次越多,需要做的工作也越多,这里需要处理各层的通信。所以,具体怎么设计,还是要分析场景,因地制宜。
分享到:
评论

相关推荐

    web前端框架MVC(backBone)实现记账应用,后端使用node.js(版本: lpNote-1.0)

    在本项目中,我们主要探讨的是使用Web前端框架MVC中的Backbone.js来构建一个记账应用程序,同时结合后端技术Node.js(版本:lpNote-1.0)。这是一个典型的前后端分离的开发模式,旨在提供高效且用户友好的交互体验。...

    MVC框架中的前端与后端数据传递及实例

    在这个场景中,我们将深入探讨如何在ASP.NET MVC中进行前端与后端的数据传递,以及如何使用jQuery的Ajax方法实现这一过程。 首先,我们要理解MVC架构的基本概念。Model代表业务逻辑和数据,View负责展示用户界面,...

    前端MVC探讨及实践

    在前端MVC框架中,模型通常是由JavaScript对象或者函数构成的,它封装了数据以及对数据进行增删改查的操作。模型的职责是独立于用户界面的,它专注于数据的业务逻辑处理,并且可以被视图和控制器所引用。在复杂的...

    前端MVC的应用.pdf

    前端MVC是指在前端开发中应用Model-View-Controller(模型-视图-控制器)架构模式的设计思想。这种架构模式来自于传统的后端开发领域,但是在前端开发中也同样适用。下面我们来详细介绍前端MVC的应用。 模型(Model...

    MvcHtml(前端JS_简单MVC写法)

    在前端MVC中,事件驱动编程是关键。模型发出事件(如数据变更)时,视图和控制器可以通过事件监听器响应这些事件。这种方式增强了系统的响应性,因为只有当数据发生变化时,才会有相应的更新操作。 5. **分离关注...

    C# mvc框架创建文档 基于bootstrap前端框架

    - **结合MVC与Bootstrap**:在C#的MVC框架中引入Bootstrap前端框架,可以迅速搭建出响应式设计的web界面,同时利用Bootstrap的组件来简化开发。 - **日志记录**:通过配置log4net,可以记录应用运行时的各种日志信息...

    前端开源库-mvcx

    总结,MVCx是一个针对Node.js环境的前端MVC框架,它提供了简洁的架构来组织前端代码,使开发过程更加有序。虽然它的功能可能不如一些主流框架全面,但在特定场景下,尤其是对轻量级框架有需求时,MVCx不失为一个好...

    豆瓣前端MVC

    标题“豆瓣前端MVC”指的是豆瓣网在前端开发中采用的MVC(Model-View-Controller)架构模式。MVC是一种广泛应用于软件工程中的设计模式,主要用来将数据(Model)、用户界面(View)和控制逻辑(Controller)分离,...

    基于 jsp+servlet+mysql实现Web的宾馆管理系统, 前端semantic MVC(源码+课程设计报告)

    【作品名称】:基于 jsp+servlet+mysql实现Web的宾馆管理系统, 前端semantic MVC(源码+课程设计报告) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实...

    基于Web的宾馆管理系统 jsp+servlet+mysql 前端semantic MVC.zip

    【标题】中的“基于Web的宾馆管理系统 jsp+servlet+mysql 前端semantic MVC”表明这是一个使用Web技术实现的宾馆管理系统的实例,它采用了JavaServer Pages (JSP)、Servlet以及MySQL数据库作为核心技术栈,并且前端...

    前端框架Bootstrap-MVC

    在"前端框架Bootstrap-MVC"中,"MVC"可能指的是模型-视图-控制器的设计模式,暗示这个框架可能是为了更好地组织和管理前端代码而设计的。 **Bootstrap框架的核心特性:** 1. **响应式设计**:Bootstrap内置了响应式...

    新版阿尔法城背后的前端MVC实践

    新版阿尔法城项目的开发实践突显了前端MVC架构的应用价值,以及它在复杂Web应用开发中的实践方法。从提供的内容中,可以提炼出以下知识点: 1. **前端MVC架构的实践价值** MVC(Model-View-Controller)架构作为一...

    Web前端MVC框架的意义研究.pdf

    总之,Web前端MVC框架在现代Web开发中扮演着重要角色,它们通过合理的架构设计,帮助开发者构建出高效、可维护的Web应用,满足了互联网时代对软件开发的高要求。随着技术的不断进步,前端MVC框架也在持续演进,为...

    JAVA WEB中MVC设计模式

    - Spring MVC的核心组件包括DispatcherServlet(前端控制器)、HandlerMapping(处理器映射器)、HandlerAdapter(处理器适配器)、ViewResolver(视图解析器)等。 6. **优势**: - 结构清晰:MVC模式将应用分为...

    C#MVC控制器前后端传值

    在C# MVC(Model-View-Controller)框架中,控制器是连接前端视图和后端模型的重要组件,负责处理用户请求、操作数据以及向视图传递数据。本篇将深入探讨C# MVC控制器如何实现前后端的数据交互。 一、基础知识 1. ...

    Spring MVC+Maven 实现前端和后台交互源码

    这是结合博客的源码,链接是:http://blog.csdn.net/u012660464/article/details/53508757 。名为:Spring MVC+Maven 实现同一项目的前端和后台交互,该源码示例了前端和后台如何进行参数的绑定传递。

    MVC3中文安装包

    MVC3与.NET Framework 4.0兼容,这意味着你可以在已有的.NET 4.0项目中使用MVC3。此外,MVC3支持NuGet包管理器,使得开发者可以轻松地发现和添加第三方库,扩展应用功能。 总的来说,ASP.NET MVC3中文安装包为...

    传统MVC架构和前后端分离架构模式对比

    MVVM(Model-View-ViewModel)架构是MVC架构的一种变体,尤其在前端开发中更为常见。与MVC相比,MVVM的主要特点是: - **Model(模型)**:与MVC相同,负责数据管理和业务逻辑处理。 - **View(视图)**:展示数据...

    asp.net MVC+三层+分页+中英文切换+自定义显示列

    在ASP.NET MVC中,可以使用内置的PagedList库或者自定义的分页逻辑来实现。 这个项目包含了一个详细的教程和代码示例,对于想要从WebForm转向MVC开发的人员来说,这是一个很好的学习资源。通过这个项目,你可以学习...

    用购物车理解前端MVC架构

    购物车整体流程: 目录结构将model view controller剥离开 ... 当用户对view进行操作时,触发注册的事件,通过command修改Model中的数据(购物车列表)从而再由command驱动view中的刷新表格进行渲染

Global site tag (gtag.js) - Google Analytics