表現與數據分離

         表現與數據分離?表現與結構分離?初級開發者遇到這個詞彙你們應該聯想到,表現與結構分離,表現應該由CSS來控制,就是css與HTML分開嘛。表現與數據分離應該就是CSS與JS分離???其實否則。javascript

初級web開發一般會利用JS獲取頁面的ID或class獲取頁面的DOM,而後進行動態交互或渲染頁面,可是,當後序升級中將包含該id的DOM刪除了,那麼這個時候就會報錯。特別是ajax的大量運用,1)對頁面元素的class id等元素選擇器分散在代碼各個地方,沒有抽象出來。2)對於ajax異步獲取的數據,也沒有對數據持久層分離,基本都是按功能分散在代碼中各個部分。3)常常在html中鑲嵌大量JS運用代碼並且是JS主要功能代碼,使代碼分散不宜維護。簡小的頁面還能夠維護,若是是大的項目該如何處理呢?這時候就應用到了表現與數據分離。css

        W3C標準中有規定,網頁主要由三部分組成:結構(Structure)、表現(Presentation)和行爲(Behavior),它們應該是相互分離的,便於後期的開發和維護。我理解的表現與數據分離是javaScript中的MVC,用JavaScript負責填充數據,HTML負責表現數據。下面咱們先說一說MVC的概念:html

       採用MVC開發的最初目的就是讓表現與數據分離。MVC 是一種使用 MVC(Model View Controller 模型-視圖-控制器)設計建立 Web 應用程序的模式, Model(模型)負責在數據庫中存取數據。View(視圖)顯示數據。Controller(控制器)控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據,保證視圖與模型數據同步更新。java

如何實現JavaScript的MVC呢???jquery

下面舉個栗子:select一個選項,並將該選項在後臺所對應的數據顯示在select下方。web

<!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。其結構以下:ajax

         

 

實現表現與數據分離的優勢和缺點:數據庫

       優勢是: 模塊化 --> 容易測試 --> 下降bug頻率app

       缺點是:程序結構複雜,比較耗時,上手有學習曲線異步

應用場景:

       項目具備明顯的數據需求,好比要與不少Service交互,業務流程複雜,表單不少

非應用場景:

      項目是典型的靜態信息展現型頁面,或是微型的內部app,或是產品idea驗證時期的MVP。

相關文章
相關標籤/搜索