Model View Controller mit Backbone.js

Werkzeuge  –  1 Kommentare

Backbone.js ist das mit Abstand am weitesten verbreitete MVC-Framework für die Entwicklung von Single-Page-Anwendungen – doch ist es auch das Beste? Um diese Frage beantworten zu können, muss man zunächst die Konzepte von Backbone.js verstehen und einordnen.

Anders als Knockout.js verwendet Backbone.js nicht das moderne Entwurfsmuster Model View ViewModel (MVVM), sondern das deutlich ältere und daher weiter verbreitete Model View Controller (MVC). Allerdings passt es einige Aspekte von MVC an seine individuellen Anforderungen an, setzt MVC also nicht in Reinform um.

Die ursprüngliche Idee des MVC-Entwurfsmusters war, einer Anwendung eine Komponente hinzuzufügen, die zwischen der Darstellung der Daten und der fachlichen Domäne vermittelt. Auf diesem Weg kann man Eingaben gebündelt verarbeiten und im Anschluss alle relevanten Ansichten aktualisieren, ohne die hierfür erforderliche Logik replizieren oder verteilen zu müssen.

Den Kern von Backbone.js bildet die Klasse Backbone.Events, von der sich wiederum Klassen wie Backbone.Model und Backbone.Collection ableiten. Da sie das Beobachtermuster implementiert, ermöglicht Backbone.Events eine entkoppelte und zugleich standardisierte Kommunikation innerhalb einer Backbone.js-Anwendung.

Für die Vererbung greift Backbone.js auf die Bibliothek Underscore.js zurück, die für zahlreiche Webentwickler ohnehin zur Standardausstattung gehört. Dass die Wahl ausgerechnet auf sie gefallen ist, ist kein Zufall: Underscore.js stammt vom gleichen Autor wie Backbone.js und ist aus diesem hervorgegangen.

Um eine Domäne zu modellieren, kennt Backbone.js die beiden bereits angesprochenen Klassen Backbone.Model und Backbone.Collection: Während erstere dazu dient, einzelne Entitäten zu beschreiben, stellt letztere eine Liste dieser dar. Die beiden Klassen bilden also eine 1:n-Beziehung.

Eine Entität kann in Backbone.js nicht nur Daten, sondern auch Geschäftsfunktionen enthalten; gleiches gilt für eine Entitätsliste. Referenzen zwischen Entitäten unterstützt Backbone.js dabei allerdings nicht: Es bleibt dem Entwickler überlassen, Beziehungen entweder über das manuelle Verwalten von IDs oder das Verwenden von Aggregation zu modellieren.

Backbone.js enthält außerdem die Klasse Backbone.View, die der Anzeige von Entitäten und Listen dient. Allerdings kapselt eine View lediglich den Zugriff auf den Webbrowser, die eigentliche Aktualisierung der grafischen Oberfläche führt Backbone.js nicht durch. Hierfür muss der Entwickler auf eine Bibliothek wie jQuery zurückgreifen.