zoukankan      html  css  js  c++  java
  • 表现与数据分离

             表现与数据分离?表现与结构分离?初级开发者遇到这个词汇大家应该联想到,表现与结构分离,表现应该由CSS来控制,就是css与HTML分开嘛。表现与数据分离应该就是CSS与JS分离???其实不然。

    初级web开发通常会利用JS获取页面的ID或class获取页面的DOM,然后进行动态交互或渲染页面,但是,当后序升级中将包含该id的DOM删除了,那么这个时候就会报错。特别是ajax的大量运用,1)对页面元素的class id等元素选择器分散在代码各个地方,没有抽象出来。2)对于ajax异步获取的数据,也没有对数据持久层分离,基本都是按功能分散在代码中各个部分。3)经常在html中镶嵌大量JS运用代码而且是JS主要功能代码,使代码分散不宜维护。简小的页面还可以维护,如果是大的项目该如何处理呢?这时候就应用到了表现与数据分离。

            W3C标准中有规定,网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior),它们应该是相互分离的,便于后期的开发和维护。我理解的表现与数据分离是javaScript中的MVC,用JavaScript负责填充数据,HTML负责表现数据。下面我们先说一说MVC的概念:

           采用MVC开发的最初目的就是让表现与数据分离。MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式, Model(模型)负责在数据库中存取数据。View(视图)显示数据。Controller(控制器)控制器负责从视图读取数据,控制用户输入,并向模型发送数据,保证视图与模型数据同步更新。

    如何实现JavaScript的MVC呢???

    下面举个栗子:select一个选项,并将该选项在后台所对应的数据显示在select下方。

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>表现与数据分离</title>
    	<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script>
    	<script type="text/javascript">
    	$(document).ready(function(){
    		var controller = {
    			start: function() {
    				this.view.start();
    			},
    			set: function(type) { //将view上变化的数据映射到model上
                     controller.model.set(type);
    			}
    		};
    		controller.model ={
    			// 初始化model
    			data: {
    				'古典文学': '三国演义',
    				'现代文学': '悲伤逆流成河',
    				'西方文学': '红与黑'},
                currentType: null,
                // 初始化model结束
    
                // 响应来自controller的数据变化
                set: function(type) {
                	this.currentType = this.data[type];
                	this.change(this.currentType);
                },
                change: function(book) {
                	controller.view.undate(book); //将modle变化后有关view的数据映射到view上,该函数外包为change
                }
    		};
    		controller.view = {
    			// 监听页面数据变化
               start: function() {
                  $("#menu").change(this.changeHandler);
               },
               // 将变化的数据映射到model上
               changeHandler: function() {
               	controller.set($("#menu").val());
               },
               undate: function(book){ // 响应来自model的数据
                 $("#show").html(book);
               }
    		};
    
    		controller.start();  //开启controller
    	});
    
    	</script>
    </head>
    <body>
      <select id="menu">
        <option value="menu">古典文学</option>
        <option value="现代文学">现代文学</option>
        <option value="西方文学">西方文学</option>
      </select>
    <div id="show"></div>
    </body>
    </html>
    

        首先创建一个Controller对象,该controller对象即可以监听view的数据变化,也可以将view的变化数据响应到model中,最终将model变化的数据更新到view。其结构如下:

             

    实现表现与数据分离的优点和缺点:

           优点是: 模块化 --> 容易测试 --> 降低bug频率

           缺点是:程序结构复杂,比较耗时,上手有学习曲线

    应用场景:

           项目具有明显的数据需求,比如要与很多Service交互,业务流程复杂,表单很多

    非应用场景:

          项目是典型的静态信息展示型页面,或是微型的内部app,或是产品idea验证时期的MVP。

  • 相关阅读:
    新手学Python必看的几个练手小项目,轻松不枯燥哦!
    实力讲解,一文读懂Python闭包与装饰器!
    Python必不可少的小技巧,一行代码减少一半内存占用!
    千篇一律的Python爬虫,大神精心总结的爬虫套路!
    Python小技巧:获取Linux系统基本信息
    大数据时代|搭建Python数据分析平台
    利用Python实时接收微博小姐姐动态啦~
    Python爬虫:把爬取到的数据插入到execl中
    正则表达式 元字符
    正则表达式——(2) – 语法
  • 原文地址:https://www.cnblogs.com/microcosm/p/7358008.html
Copyright © 2011-2022 走看看