Heim Web-Frontend js-Tutorial Das MVC-Muster in javascript_javascript-Tipps verstehen

Das MVC-Muster in javascript_javascript-Tipps verstehen

May 16, 2016 pm 03:17 PM
javascript mvc

MVC-Muster ist ein Software-Architekturmuster in der Softwareentwicklung. Das Softwaremuster ist im Allgemeinen in drei Teile unterteilt: Modell, Ansicht und Controller;

Modell: Das Modell wird verwendet, um Daten im Zusammenhang mit der Geschäftslogik der Anwendung und Methoden zur Datenverarbeitung zu kapseln. Modelle haben direkten Zugriff auf die Daten. Das Modell ist nicht auf „Ansicht“ und „Controller“ angewiesen, was bedeutet, dass es dem Modell egal ist, wie die Seite angezeigt und bedient wird.

Ansicht: Das Wichtigste der Ansichtsebene besteht darin, die Datenänderungen auf der Modellebene zu überwachen und die HTML-Seite in Echtzeit zu aktualisieren. Natürlich umfasst es auch einige Ereignisregistrierungs- oder Ajax-Anforderungsvorgänge (Veröffentlichen von Ereignissen), die alle in der Ansichtsebene ausgeführt werden.

Controller: Der Controller empfängt die Operation des Benutzers. Das Wichtigste ist, die Ereignisse der Ansichtsebene zu abonnieren und dann das Modell oder die Ansicht aufzurufen, um die Operation des Benutzers abzuschließen Seite, der Controller gibt nichts aus und antwortet. Die Seite führt keine Verarbeitung durch, sondern empfängt lediglich die Anfrage und entscheidet, welche Methode im Modell aufgerufen werden soll, um die Anfrage zu verarbeiten, und bestimmt dann, welche Methode in der Ansicht aufgerufen werden soll, um die zurückgegebenen Daten anzuzeigen .

Lassen Sie uns ein einfaches Dropdown-Box-Steuerelement implementieren, das wir wie in der Abbildung unten gezeigt hinzufügen und löschen können:

Der Code lautet wie folgt:

/*
 模型用于封装与应用程序的业务逻辑相关的数据以及对数据处理的方法。模型有对数据直接访问的权利。
 模型不依赖 "视图" 和 "控制器", 也就是说 模型它不关心页面如何显示及如何被操作.
*/
function Mode(elems) {
  // 所有元素
  this._elems = elems;
 
  // 被选中元素的索引
  this._selectedIndex = -1;
 
  // 增加一项
  this.itemAdd = new Event(this);
 
  // 删除一项
  this.itemRemoved = new Event(this);
 
  this.selectedIndexChanged = new Event(this);
}
 
Mode.prototype = {
 
  constructor: 'Mode',
 
  // 获取所有的项
  getItems: function(){
    return [].concat(this._elems);
  },
  // 增加一项
  addItem: function(elem) {
    this._elems.push(elem);
    this.itemAdd.notify({elem:elem});
  },
  // 删除一项
  removeItem: function(index) {
    var item = this._elems[index];
    this._elems.splice(index,1);
    this.itemRemoved.notify({elem:item});
 
    if(index === this._selectedIndex) {
      this.setSelectedIndex(-1);
    }
  },
  getSelectedIndex: function(){
    return this._selectedIndex;
  },
  setSelectedIndex: function(index){
    var previousIndex = this._selectedIndex;
    this._selectedIndex = index;
    this.selectedIndexChanged.notify({previous : previousIndex});
  }
};
/*
 下面是观察者模式类,它又叫发布---订阅模式;它定义了对象间的一种一对多的关系,
 让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知。
*/
function Event(observer) {
  this._observer = observer;
  this._listeners = [];
}
Event.prototype = {
  constaructor: 'Event',
  attach : function(listeners) {
    this._listeners.push(listeners);
  },
  notify: function(objs){
    for(var i = 0,ilen = this._listeners.length; i ) {
      this._listeners[i](this._observer,objs);
    }
  }
};
 
/*
 * 视图显示模型数据,并触发UI事件。
 */
function View(model,elements){
  this._model = model;
  this._elements = elements;
 
  this.listModified = new Event(this);
  this.addButtonClicked = new Event(this);
  this.delButtonClicked = new Event(this);
  var that = this;
 
  // 绑定模型监听器
  this._model.itemAdd.attach(function(){
    that.rebuildList();
  });
  this._model.itemRemoved.attach(function(){
    that.rebuildList();
  });
 
  // 将监听器绑定到HTML控件上
  this._elements.list.change(function(e){
    that.listModified.notify({index: e.target.selectedIndex});
  });
  // 添加按钮绑定事件
  this._elements.addButton.click(function(e){
    that.addButtonClicked.notify();
  });
  // 删除按钮绑定事件
  this._elements.delButton.click(function(e){
    that.delButtonClicked.notify();
  });
}
View.prototype = {
  constructor: 'View',
  show: function(){
    this.rebuildList();
  },
  rebuildList: function(){
    var list = this._elements.list,
      items,
      key;
    list.html("");
    items = this._model.getItems();
    for(key in items) {
      if(items.hasOwnProperty(key)) {
        list.append('' +items[key]+ '');
      }
    }
    this._model.setSelectedIndex(-1);
  }
};
/*
 控制器响应用户操作,调用模型上的变化函数
 负责转发请求,对请求进行处理
*/
function Controller(model,view) {
  this._model = model;
  this._view = view;
  var that = this;
 
  this._view.listModified.attach(function(sender,args){
    that.updateSelected(args.index);
  });
  this._view.addButtonClicked.attach(function(){
    that.addItem();
  });
  this._view.delButtonClicked.attach(function(){
    that.delItem();
  });
}
Controller.prototype = {
  constructor: 'Controller',
 
  addItem: function(){
    var item = window.prompt('Add item:', '');
    if (item) {
      this._model.addItem(item);
    }
  },
 
  delItem: function(){
    var index = this._model.getSelectedIndex();
    if(index !== -1) {
      this._model.removeItem(index);
    }
  },
 
  updateSelected: function(index){
    this._model.setSelectedIndex(index);
  }
};
Nach dem Login kopieren

Der HTML-Code lautet wie folgt:

<select id="list" size="10" style="width: 10rem">select>br/>
<button id="plusBtn"> + button>
<button id="minusBtn"> - button>
Nach dem Login kopieren

Der Seiteninitialisierungscode lautet wie folgt:

$(function () {
  var model = new Mode(['PHP', 'JavaScript']),
   view = new View(model, {
    'list' : $('#list'), 
    'addButton' : $('#plusBtn'), 
    'delButton' : $('#minusBtn')
    }),
    controller = new Controller(model, view);    
    view.show();
});
Nach dem Login kopieren

Die Codeanalyse ist wie folgt:

Lassen Sie uns zunächst analysieren, welche Art von Funktionen wir erreichen möchten. Die Grundfunktionen sind:

Ein Dropdown-Feld, das es dem Benutzer ermöglicht, ein Element hinzuzufügen und zu löschen, nachdem er es durch Benutzereingabevorgänge ausgewählt hat;
Natürlich wird auch das Ereignis für den Benutzer zum Wechseln zu diesem Element hinzugefügt

Wenn wir jetzt beispielsweise ein Datenelement hinzufügen, fügen Sie ein Listening-Ereignis auf der Ansichtsebene hinzu, wie im folgenden Code gezeigt:

// 添加按钮绑定事件
this._elements.addButton.click(function(e){
  that.addButtonClicked.notify();
});
Nach dem Login kopieren

Rufen Sie dann die Benachrichtigungsmethode in der Beobachterklasse Event auf (veröffentlichen Sie ein Ereignis). Wie wir alle wissen, wird der Beobachtermodus auch als Publish-Subscribe-Modus bezeichnet, sodass mehrere Beobachterobjekte ein Ereignis überwachen können bestimmtes Ereignis gleichzeitig. Wenn sich ein Themenobjekt ändert, werden alle davon abhängigen Objekte benachrichtigt Daher können wir in der Kontrollschicht (Controller) den folgenden Code verwenden, um den Herausgeber zu überwachen:

this._view.addButtonClicked.attach(function(){
  that.addItem();
});
Nach dem Login kopieren
Rufen Sie dann die eigene Methode addItem() auf. Der Code lautet wie folgt:


addItem: function(){
  var item = window.prompt('Add item:', '');
  if (item) {
    this._model.addItem(item);
  }
}
Nach dem Login kopieren
Rufen Sie die Methode addItem() der Modellebene (Modell) auf. Fügen Sie ein Datenelement in das Auswahlfeld ein. Der Code der Methode addItem() des Modells (Modellebene) lautet wie folgt:


// 增加一项
addItem: function(elem) {
  this._elems.push(elem);
  this.itemAdd.notify({elem:elem});
},
Nach dem Login kopieren
Der obige Code fügt ein Element hinzu, veröffentlicht eine Nachricht über this.itemAdd und überwacht die Nachricht dann über den folgenden Code auf der Ansichtsebene (Ansicht); der Code lautet wie folgt:


// 绑定模型监听器
this._model.itemAdd.attach(function(){
   that.rebuildList();
});
Nach dem Login kopieren
Nachdem die Daten auf dem Modell (Model) schließlich überwacht wurden, ruft es umgehend seine eigene Methode rebuildList() auf, um die Daten auf der Seite zu aktualisieren

Die Modellschicht (Modell) ist hauptsächlich für die Kapselung von Geschäftsdaten verantwortlich. Die Ansichtsebene (Ansicht) veröffentlicht hauptsächlich Ereignisvorgänge und überwacht Daten auf der Modellebene. Wenn sich die Daten auf der Modellebene ändern, werden die Seitenvorgänge rechtzeitig aktualisiert und schließlich hauptsächlich auf der Seite angezeigt Überwacht die Ansichtsebene (Ansicht). Rufen Sie die Methode der Modellebene (Modell) auf, um die Daten auf der Modellebene zu aktualisieren. Schließlich wird die Ansichtsebene (Ansicht) veröffentlicht. Aktualisiert die Seite durch Überwachung der Datenänderungen der Modellebene (Modellanzeige). Das Obige ist der grundlegende Prozess von MVC.

Vorteile von MVC:
 
1. Geringe Kopplung: Die Ansichtsebene und die Geschäftsebene sind getrennt. Wenn sich die Anzeige auf der Seite ändert, kann sie direkt in der Ansichtsebene geändert werden, ohne das Modell zu berühren Ebene und Steuerung Der Code auf der Ebene; das heißt, die Ansichtsebene, die Modellebene und die Kontrollebene Bereits getrennt; daher ist es einfach, die Datenschicht und die Geschäftsregeln der Anwendungsschicht zu ändern. ​​  

2. Wartbarkeit: Die Trennung der Ansichtsschicht und der Geschäftslogikschicht erleichtert auch die Wartung und Änderung von WEB-Anwendungen. Nachteile von MVC:
Persönlich denke ich, dass es für große Projekte geeignet ist, aber nicht für kleine und mittlere Projekte, da für einfache Hinzufügungs-, Lösch- und Änderungsvorgänge nur wenig JS-Code, aber die Menge an MVC-Moduscode erforderlich ist ist deutlich gestiegen. Natürlich steigen auch die Lernkosten, wenn Sie einige gekapselte MVC-Bibliotheken oder -Frameworks verwenden.

Das Obige ist eine detaillierte Analyse der MVC-Musterimplementierungsmethode in JavaScript sowie ihrer Vor- und Nachteile. Ich hoffe, dass sie für das Lernen aller hilfreich sein wird.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Zwei -Punkte -Museum: Alle Exponate und wo man sie finden kann
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript Dec 17, 2023 pm 02:54 PM

So implementieren Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem. Einführung: Mit der kontinuierlichen Weiterentwicklung der Technologie ist die Spracherkennungstechnologie zu einem wichtigen Bestandteil des Bereichs der künstlichen Intelligenz geworden. Das auf WebSocket und JavaScript basierende Online-Spracherkennungssystem zeichnet sich durch geringe Latenz, Echtzeit und plattformübergreifende Eigenschaften aus und hat sich zu einer weit verbreiteten Lösung entwickelt. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem implementieren.

WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen Dec 17, 2023 pm 05:30 PM

WebSocket und JavaScript: Schlüsseltechnologien zur Realisierung von Echtzeit-Überwachungssystemen Einführung: Mit der rasanten Entwicklung der Internet-Technologie wurden Echtzeit-Überwachungssysteme in verschiedenen Bereichen weit verbreitet eingesetzt. Eine der Schlüsseltechnologien zur Erzielung einer Echtzeitüberwachung ist die Kombination von WebSocket und JavaScript. In diesem Artikel wird die Anwendung von WebSocket und JavaScript in Echtzeitüberwachungssystemen vorgestellt, Codebeispiele gegeben und deren Implementierungsprinzipien ausführlich erläutert. 1. WebSocket-Technologie

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript Dec 17, 2023 am 09:39 AM

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript. Im heutigen digitalen Zeitalter müssen immer mehr Unternehmen und Dienste Online-Reservierungsfunktionen bereitstellen. Es ist von entscheidender Bedeutung, ein effizientes Online-Reservierungssystem in Echtzeit zu implementieren. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Reservierungssystem implementieren, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist WebSocket? WebSocket ist eine Vollduplex-Methode für eine einzelne TCP-Verbindung.

Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Dec 17, 2023 pm 12:09 PM

Einführung in die Verwendung von JavaScript und WebSocket zur Implementierung eines Online-Bestellsystems in Echtzeit: Mit der Popularität des Internets und dem Fortschritt der Technologie haben immer mehr Restaurants damit begonnen, Online-Bestelldienste anzubieten. Um ein Echtzeit-Online-Bestellsystem zu implementieren, können wir JavaScript und WebSocket-Technologie verwenden. WebSocket ist ein Vollduplex-Kommunikationsprotokoll, das auf dem TCP-Protokoll basiert und eine bidirektionale Kommunikation zwischen Client und Server in Echtzeit realisieren kann. Im Echtzeit-Online-Bestellsystem, wenn der Benutzer Gerichte auswählt und eine Bestellung aufgibt

PHP MVC-Architektur: Webanwendungen für die Zukunft erstellen PHP MVC-Architektur: Webanwendungen für die Zukunft erstellen Mar 03, 2024 am 09:01 AM

Einführung In der sich schnell entwickelnden digitalen Welt von heute ist es von entscheidender Bedeutung, robuste, flexible und wartbare WEB-Anwendungen zu erstellen. Die PHPmvc-Architektur bietet eine ideale Lösung, um dieses Ziel zu erreichen. MVC (Model-View-Controller) ist ein weit verbreitetes Entwurfsmuster, das verschiedene Aspekte einer Anwendung in unabhängige Komponenten unterteilt. Die Grundlage der MVC-Architektur Das Kernprinzip der MVC-Architektur ist die Trennung von Belangen: Modell: Kapselt die Daten und Geschäftslogik der Anwendung. Ansicht: Verantwortlich für die Präsentation von Daten und die Abwicklung der Benutzerinteraktion. Controller: Koordiniert die Interaktion zwischen Modellen und Ansichten, verwaltet Benutzeranfragen und Geschäftslogik. PHPMVC-Architektur Die phpMVC-Architektur folgt dem traditionellen MVC-Muster, führt aber auch sprachspezifische Funktionen ein. Das Folgende ist PHPMVC

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Dec 17, 2023 pm 05:13 PM

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Einführung: Heutzutage ist die Genauigkeit von Wettervorhersagen für das tägliche Leben und die Entscheidungsfindung von großer Bedeutung. Mit der Weiterentwicklung der Technologie können wir genauere und zuverlässigere Wettervorhersagen liefern, indem wir Wetterdaten in Echtzeit erhalten. In diesem Artikel erfahren Sie, wie Sie mit JavaScript und WebSocket-Technologie ein effizientes Echtzeit-Wettervorhersagesystem aufbauen. In diesem Artikel wird der Implementierungsprozess anhand spezifischer Codebeispiele demonstriert. Wir

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

So verwenden Sie insertBefore in Javascript So verwenden Sie insertBefore in Javascript Nov 24, 2023 am 11:56 AM

Verwendung: In JavaScript wird die Methode insertBefore() verwendet, um einen neuen Knoten in den DOM-Baum einzufügen. Diese Methode erfordert zwei Parameter: den neuen Knoten, der eingefügt werden soll, und den Referenzknoten (d. h. den Knoten, an dem der neue Knoten eingefügt wird).

See all articles