JavaScript Architektur

64
JavaScript Architektur Erich Westendarp / pixelio.de

description

Architektur von JavaScript-Applikationen

Transcript of JavaScript Architektur

Page 1: JavaScript Architektur

JavaScript Architektur

Erich Westendarp / pixelio.de

Page 2: JavaScript Architektur

WER BIN ICH?

• Sebastian Springer

• https://github.com/sspringer82

• @basti_springer

• Consultant, Trainer, Autor

Page 3: JavaScript Architektur

JavaScript Applikationen?

Page 4: JavaScript Architektur

Codeverteilung Client/Server: 50/50

LOC: >1 Mio.

Budget: > 1 Mio.

Businesskritische Applikationen

Entwicklerteam: > 20 Personen

Nicht branchenspezifisch

Page 5: JavaScript Architektur

Architektur in JavaScript?

Page 6: JavaScript Architektur

Architektur

Strukturierte oder hierarchische Anordnung der Systemkomponenten sowie Beschreibung

ihrer Beziehungen. (Helmut Balzert)

Page 7: JavaScript Architektur

Wozu Architektur?

Page 8: JavaScript Architektur

birgitH / pixelio.de

Page 9: JavaScript Architektur

Wartbarkeit

Page 10: JavaScript Architektur

Finde den Fehler

Karl-Heinz Laube / pixelio.de

Page 11: JavaScript Architektur

Erweiterbarkeit

Page 12: JavaScript Architektur

Kosten/Zeit neuer Features

Stefan / pixelio.de

Page 13: JavaScript Architektur

Testbarkeit

Page 14: JavaScript Architektur

Aufwand für Tests

uygar sanli / pixelio.de

Page 15: JavaScript Architektur

Parallele Arbeit

Page 16: JavaScript Architektur

Unabhängige KomponentenRainer Sturm / pixelio.de

Page 17: JavaScript Architektur

Nerven der Entwickler

Page 18: JavaScript Architektur

Paul-Georg Meister / pixelio.de

Page 19: JavaScript Architektur

Also: Architektur FTW

Lutz Smolka / pixelio.de

Page 20: JavaScript Architektur

Aber wie?

Page 21: JavaScript Architektur

Multi-Page vs.

Single-Page

Page 22: JavaScript Architektur

Multi-Page

Page 23: JavaScript Architektur

Multi-Page

Mehrere getrennte Seiten. JavaScript eher als Unterstützung und nicht zwingend für die

Applikation erforderlich. Einfacher barrierefrei zu gestalten. Oft für öffentliche Seiten und

Shops.

Page 24: JavaScript Architektur

Single-Page

Page 25: JavaScript Architektur

Single-Page

Nur eine/wenige Seiten. JavaScript zwingend für die Applikation erforderlich. Navigation

und Abbildung der Business Logik über JavaScript. Wird für Applikationen eingesetzt.

Page 26: JavaScript Architektur

Global Scope

Thorben Wengert / pixelio.de

Page 27: JavaScript Architektur

Global Scope

Namenskonflikte im globalen Namensraum. Wiederverwendbarkeit wird durch

Unberechenbarkeit eingeschränkt. Ungewollte Seiteneffekte durch gleiche Variablennamen. Eingeschränkte Nachvollziehbarkeit des

Quellcodes.

Page 28: JavaScript Architektur

Global Scope

• Funktionsparameter

• Dependency Injection

• Nur konstante globale Werte

• Singletons

Page 29: JavaScript Architektur

Client vs. Server

Page 30: JavaScript Architektur

Client vs. Server

Client Source Code wird statisch vom Server ausgeliefert. Nutzdaten werden per Ajax-

Request im JSON-Format nachgeladen.

Page 31: JavaScript Architektur

Separation der Sprachen

H.D.Volz / pixelio.de

Page 32: JavaScript Architektur

Separation der Sprachen

HTML für die Struktur, CSS für das Layout und JavaScript für die Logik.

!

Pro Datei nur eine Sprache.

Page 33: JavaScript Architektur

Modularisierung

Initiative Echte Soziale Marktwirtschaft IESM / pixelio.de

Page 34: JavaScript Architektur

Modularisierung

Unterteilung der Applikation in den Kern und einzelne Komponenten oder Module.

Der Kern stellt die Infrastruktur und die Integrationsplattform für die Module dar.

Die Module beinhalten die einzelnen Features der Applikation.

Page 35: JavaScript Architektur

MVWModel View Whatever

Page 36: JavaScript Architektur

Model-View-Patterns

Separation von Datenhaltung und Anzeigelogik in verschiedenen Ausprägungen.

Es gibt Frameworks, die diese Pattern unterstützen.

Page 37: JavaScript Architektur

MVC

Page 38: JavaScript Architektur

MVCModel View Controller

!

Seit 1979 in Smalltalk. Models halten die Daten und die

Businesslogik. Views visualisieren die Daten.

Controller verbinden die Models und die Views miteinander.

Page 39: JavaScript Architektur

MVC

Controller

Model

View

Benachrichtigt

Holt Daten Ändert

Events

Page 40: JavaScript Architektur

MVP

Page 41: JavaScript Architektur

MVP

Model View Presenter !

Seit den frühen 1990ern. Weiterentwicklung von MVC.

Konzentration auf die Präsentationslogik. Presenter enthält die Anzeigelogik.

Page 42: JavaScript Architektur

MVP

Presenter

Model

View

Daten

EventsDaten

Page 43: JavaScript Architektur

MVVM

Page 44: JavaScript Architektur

MVVMModel View ViewModel

!

Seit 2005 von Microsoft. Weiterentwicklung von MVC und MVP.

Model enthält Daten und Businesslogik. Die View übernimmt die Anzeige.

ViewModel sorgt für die automatische Datenbindung zwischen Model und View.

Page 45: JavaScript Architektur

MVVM

ViewModel

Model

View

Daten

Databinding

Page 46: JavaScript Architektur

Unterschiede• Abhängigkeiten zwischen den Schichten • MVC: View sitzt auf der Struktur parallel

zum Controller • MVP: Controller wird durch Presenter

ersetzt (Events von Models und Views) • MVVM: Es wird nur ein Teil des Models

der View bekannt gegeben

Page 47: JavaScript Architektur

Frameworks

w.r.wagner / pixelio.de

Page 48: JavaScript Architektur

Frameworks

Lösung für häufig auftretende Problemstellungen. Hilfestellungen auch für zukünftige Probleme, von denen man noch

nicht einmal weiß, dass man sie haben wird. Bieten häufig Strukturierungselemente.

Basieren häufig auf jQuery.

Page 49: JavaScript Architektur
Page 50: JavaScript Architektur

Backbone.js

Einfaches Framework mit vorgegebenen Model- und View-Strukturen.

Hash- und PushState-Navigation über einen Router.

Sammlung von Models in Collections.! Models sind REST-fähig.

Page 51: JavaScript Architektur
Page 52: JavaScript Architektur

Ember.jsController halten den Zustand der Applikation. Models als Datencontainer, die über XHRs

mit dem Server kommunizieren können. Handlebars als Template Engine.

Komponenten zur Erweiterung von HTML. Models und Templates werden automatisch synchronisiert. Router zur Navigation

innerhalb der Applikation.

Page 53: JavaScript Architektur
Page 54: JavaScript Architektur

AngularJSVon Google seit 2009. Deskriptive

Programmierung. HTML als Templatesprache wird durch Direktiven erweitert. Dependency

Injektion Mechanismus zur Auflösung von Abhängigkeiten. Models als einfache

Datencontainer und Services für wiederverwendbare Logik. Two-Way Data

Bindung über das ViewModel zwischen Model und View. Unterstützt testbaren Code.

Page 55: JavaScript Architektur

Module Loader

Peter Kamp / pixelio.de

Page 56: JavaScript Architektur

Module Loader

Laden von JavaScript-Dateien ohne Script-Tag. Auflösung von Abhängigkeiten. Potenzial

zur Optimierung einer Applikation.

Page 57: JavaScript Architektur

RequireJS

Page 58: JavaScript Architektur

RequireJSModule Loader des Dojo Frameworks.

AMD Standard. Im Wesentlichen zwei Funktionen: require &

define. shim-Konfiguration für Bibliotheken ohne AMD.

r.js Optimizer zum Konkatenieren und Minifizieren.

Page 59: JavaScript Architektur

CommonJS Modules

Page 60: JavaScript Architektur

CommonJS Modules

Serverseitige Standardisierung. Wird vor allem in

Node.js eingesetzt, aber auch clientseitige Implementierung.

Definition über module.exports.

Einbindung über require.

Standardmäßig kein Optimizier.

Page 61: JavaScript Architektur

ES6 Module

Page 62: JavaScript Architektur

ES6 Module

Der neue JavaScript-Sprachstandard sieht ein eigenes Modulsystem vor. Ein separater Loader übernimmt das Laden der Module.

Aktuell noch keine Browserunterstützung. Definition über module Keyword.

Zusätzlich gibt es noch import und export.

Page 63: JavaScript Architektur

Fragen

Angela Parszyk / pixelio.de

Page 64: JavaScript Architektur

KONTAKT

Sebastian Springer [email protected] !Mayflower GmbH Mannhardtstr. 6 80538 München Deutschland !@basti_springer !https://github.com/sspringer82