ENTERPRISEY ANGULAR.JS

Ähnliche Dokumente
Aachen, den 19. Januar 2016

Wir bringen Ihre Notes/Domino Anwendungen sicher ins Web , Bilster Berg Drive Resort Michael Steinhoff, agentbase AG.

NILS HARTMANN OLIVER ZEIGERMANN EINSTIEG IN. React.

bsc Education Center bsc solutions GmbH & Co. KG Industriestr. 50 b, Walldorf Tel:

ZenQuery - Enterprise Backend as a Service Single Page Applications mit AngularJS und Spring MVC. - Björn Wilmsmann -

Hauptseminar Informatik. Java Web Frameworks Alexander Löser

Maximilian Berghoff 2

Schnelle Winkel. Performantere JEE Webapps mit AngularJS

EINFÜHRUNG IN REACT.JS UND REDUX

Schnelle Winkel. 10x schnellere Webapps mit AngularJS und Jee

Architektur von Informationssystemen. Hochschule für angewandte Wissenschaften Sommersemester 2016

VON MVC ZU MODEL-VIEW-VIEWMODEL

.NETUser. Daniel Schädler. schaedlerdaniel.wordpress.com schaedld. Group Bern

Tragfähige Frontend-Architekturen

Mit AngularJS Projekte schnell an die Wand fahren

React.js flottes Front-End für Domino. Knut Herrmann

Einsatz von Scalable Vector Graphics (SVG) zur Modellrepräsentation und -manipulation in Web-Anwendungen mit J2EE. Motivation und Zielsetzung

NILS HARTMANN. React MODERNE WEB-ANWENDUNGEN MIT. Slides: BED-CON BERLIN SEPTEMBER

MVC-Architektur am Beispiel von OLAT

auxiliary - Objektorientiertes Framework für PHP 5 Frank Kleine auxiliary Objektorientiertes Framework für PHP5

Session 2. Notes Apps auf ipad & Co. Wie native Apps mit Notes synchronisieren können.

Mit AngularJS Projekte schnell an die Wand fahren

Mail: Web: juergen-schuster-it.de

Web 2. Gang. Python User Group Köln Christopher Arndt

Architektur Pattern. Organisation und Interaktion zwischen den Komponenten

Eclipse Rieh Client Platform

!!!! Mail: Web: juergen-schuster-it.de. ! APEX D-A-CH Facebook Group: bit.ly/apex_on_facebook

DB-Aspekte des E-Commerce Schwerpunkt: Techniken. Servlets und JavaServer Pages

Forms Desktop Kooperation

Komponentenorientierte Software-Entwicklung. Seite 1 / 42

Cross-Platform Mobile Apps

Microservices. - Integration der Benutzeroberfläche - Version: Orientation in Objects GmbH. Weinheimer Str.

Spiel, Spaß, Spannung mit ember js

React in Apex Mit React zu noch besseren Apex Apps

Webentwicklung mit Vaadin 7. Theoretische und praktische Einführung in Vaadin 7. Christian Dresen, Michael Gerdes, Sergej Schumilo

Evaluation von Angular als Framework für Single-Page-Webanwendungen

VAADIN, SPRING BOOT & REST

Legacy Web-Apps mit AngularJS pimpen

Cross Platform Development mit SharePoint

D3kjd3Di38lk323nnm. AngularJS. Philipp Tarasiewicz / Robin Böhm, AngularJS, dpunkt.verlag, ISBN

Echte Cross-Plattform Anwendungen mit Angular 2 in Action!

Frontend-Entwicklung mit JavaScript

Going Crazy mit JavaScript: Grafik im Browser. Martin Marinschek, Stefan Schuster IRIAN.at

Zustand und Entwicklung von DSpace

1.1 Für wen dieses Buch gedacht ist Einleitung Danksagung... 2

Architektur von REST basierten Webservices

Single Sourcing in Java: Desktop-Anwendung & Web-Applikation aus einer Quelle

Microsoft Office SharePoint 2007

Django - ein Python Web-Framework

Kompendium der Web-Programmierung

Silverstripe CMS und das Sapphire Framework

Leichtgewichtige Web 2.0-Architektur für komplexe Business-Anwendungen Nicolas Moser PRODYNA AG

Integration von UIS-Webdiensten

Konzeption und Implementierung einer dateibasierten Lösung zum Offline-Zugriff auf eine Enterprise 2.0 Plattform

<Insert Picture Here> Generierung von ADF-Applikationen aus Metadaten des Oracle Designer

Bengt Weiße. AngularJS & lonic. Framework. Hybride App-Entwicklung. mit JavaScript. und HTML5 HANSER

Eberhard Wolff. Spring. Framework für die Java-Entwicklung. "BJ dpunkt.verlag

D3kjd3Di38lk323nnm. AngularJS. Philipp Tarasiewicz / Robin Böhm, AngularJS, dpunkt.verlag, ISBN

Red Bull TV. Entwicklung einer Real World Windows Phone 7 Applikation in 70 Minuten. Max Knor Developer Evangelist Microsoft

WebComponents. Bausteine des modernen Web

Ein UI in zwei Welten - Controls in HTML5 und WPF. Timo Korinth

Mit PL/SQL auf s ipad

Frühling für iphone-apps

Be dynamic! RichClient-Funktionalitäten mit dem Google Web Toolkit

LT 56 - NODE.JS ES GIBT AUCH SCHÖNE MOMENTE. Ralf Enderle

ORACLE. EXPERTISE. PASSION.

Oracle BI Publisher - PDF und einiges mehr

Rich Internet Applications with JavaScript Angular

FOLIO EINFÜHRUNG. Richard Redweik Universitätsbibliothek Leipzig

ADF Mobile konkret Best Practices Live erklärt. Jan Ernst

Disclaimer. Copyright 2014, Oracle and/or its affiliates. All rights reserved.

Nutzung von JavaFX. Wo? Wann? Wie?

Diagramme - Next Generation

Stefan Zörner. Portlets. Portalkomponenten in Java. ntwickier

Server-centric vs. Client-centric Web Applications. BITKOM Software Summit 2014, Frankfurt

Line-of-Business-Apps mit der Universal Windows Platform entwickeln. Thomas Claudius

als Alternative zu REST Manuel

Client-Architektur. in Angular. Philipp Burgmer

OWASP Stammtisch München Sep 2014 XSS und andere Sicherheitslücken aus der Perspektive des Programmcodes

Web-Anwendungen mit JavaServer Faces

Windows Presentation Foundation

Grails. Weiterführende Themen zu Internet- und WWW-Technologien. Matthias Springer. 06. Juni 2011

Vorstellung e.solutions

Auf einen Blick. TEIL I Einführung 1 SAPUI5 auf einen Blick Architektur... 43

XML Publisher die universelle Lösung für Geschäftsdokumente

Spiel, Spaß, Spannung mit ember js

Multimedia im Netz Wintersemester 2012/13

Created by Angelo Maron

+++ Bitte nutzen Sie die integrierte Audio-Funktion von WebEx (Menü Audio -> Integrated Voice Conference -> Start auswählen), umuns zu hören!!!

New Features Oracle Forms 11g Nichts Neu für Forms?

Mit PL/SQL auf s ipad

WebanWendungen mit Javascript. Ein Film von Marcus Schiesser, GEOwidget GmbH

Skalierbare Enterprise Architekturen für Universal Windows Platform Apps

Layouterstellung im Web und interaktives Arbeiten mit dem BI Publisher

Transkript:

ENTERPRISEY ANGULAR.JS THE GOOD, THE BAD, AND THE UGLY EnterJS 2015 - Ralph Guderlei

Technology Advisor @ @rguderlei

ENTERPRISE APPLICATIONS? komplexe Datenmodelle (100+ Entities) komplexe Geschäftsprozesse Integration mit Drittsystemen relativ wenig Concurrent User

AGENDA 1. Angular.js 2. Organisation großer Projekte 3. Performance 4. komplexe Prozesse

ANGULAR.JS

ANGULAR.JS Javascript MV*-Framework entwickelt von Google momentan das populärste JS-MVC-Framework

TEMPLATES HTML-Fragmente deklaratives two-way databinding <label>name:</label> <input type="text" ng model="yourname" placeholder="enter a name here"> <hr> <h1>hello {{yourname}}!</h1>

CONTROLLER & SCOPE Controller ist Konstruktor für Scope Scope ist ViewModel simpleapp.controller('simplecontroller', function($scope) { $scope.yourname = 'enterjs'; })

DEMO Name: world Hello world!

SERVICES enthalten Daten und Funktionalität Singletons erlauben die gemeinsame Nutzung von Daten

DIREKTIVEN DOM-Manipulationen geschlossene Komponente: isolated scope bestehen meistens aus Template+Controller

ORGANISATION GROSSER PROJEKTE

STRUKTUR & NAMENSKONVENTIONEN Feature-basierte Ordnerstruktur Ordnerstruktur entspricht Modul-Namen 1 Modul pro Datei oft 1 Element (Controller, Service, Direktive) pro Datei Name enthält Elementtyp: foo.service.js

ROUTER Router-States definieren die Zustände der Anwendung $stateprovider.state('home', {}).state('movies', {abstract: true,...}).state('movies.list', {...}).state('movies.detail', {...}); Anwendungs-Zustände entsprechen Sichten, z.b. Filmliste/-details Ordnerstruktur der beteiligten Elemente entspricht dem Router-State/URL

TEMPLATES - DON'TS enthalten Logik: Rechte/Rollen/Varianten besser über Router-States abbilden ng-include <section id="headline"> <h1>exxcellent Movie Database</h1> </section> <a href="..." ng show="isadmin()">...</a> <section id="topmovies"> <div ng include="'movielist.tpl.html'" ng controller="movielistc </section>

TEMPLATES - DOS Darstellung der Daten Strukturierung über Direktiven <section id="headline"> <h1>exxcellent Movie Database</h1> </section> <section id="topmovies"> <h3>top movies</h3> <movie list movies="movies.topmovies"></movie list> </section>

DIREKTIVEN isolated scope verbessert Nachvollziehbarkeit Markup besser verständlich <ul class="list group"> <li ng repeat="movie in movies" class="list group item"> <movie element movie="movie"></movie element> </li> </ul> angular.module('angularlt.home.movielist', []).directive('movielist', function(){ return { restrict: 'E', templateurl: 'app/home/movielist.tpl.html', scope: { movies: '=' } }; });

CONTROLLER - DON'TS Daten aktiv laden Geschäftslogik Scope inheritance (ng-include) $scope.$watch angular.module('angularlt.home',[]).controller('homecontroller', function ($scope, $http) { $http.get('/api/movies', function(response){ $scope.topmovies = _.take(response.data, 10); }); });

CONTROLLER - DOS $scope: Verbindet Funktionalität/Daten mit Templates nur Darstellungs-Logik Daten im resolve-step des Routers laden skinny controller angular.module('angularlt.home',[]).controller('homecontroller', function ($scope, movieservice) { $scope.movies = movieservice; });

SERVICES Service ist Modell enthalten "Geschäftslogik" interagieren mit dem Backend halten Daten (z.b. angemeldeter Benutzer) erzeugen Events

ZUSAMMENFASSUNG Angular Template Controller $scope Service Rest der Welt View Konstruktor View-Model ViewModel Model

PERFORMANCE

BEISPIEL - DATENMODELL

URSACHEN Two-Way Databinding: viele Watcher Limit ca. 2000 Watcher ineffizientes Backend

OPTIONEN - WATCHER Transparenz schaffen: Chrome Extension weniger Daten One-Time Binding (Angular 1.3, BindOnce)

OPTIONEN - BACKEND weniger HTTP-Calls, Caching Datenvolumen auf Serverseite reduzieren Antwortzeiten reduzieren bei vielen Direktiven: Template Cache nutzen

KOMPLEXE PROZESSE

BEISPIEL

TYPISCHE PROZESSE viele Einzelschritte nicht sequenziell unterschiedliche Aktoren beteiligt

ROUTER ALS STATEMACHINE jeder Zustand des Vorgangs ein Router-State Zustände individuell darstellbar Zustände bookmarkfähig Zulässigkeit der Transition bei onenter

ROUTER ALS STATEMACHINE - BEISPIEL $stateprovider.state('process', {abstract: true,...}).state('process.created', {...}).state('process.submitted', {...});

SYNCHRONISATION MIT BACKEND Idee: Vorgang als REST-Resource Repräsentation enthält Links auf zulässige Transitionen REST-Service für Transitionen keine Logik im Client Standards: Siren, HAL, collection+json, UBER

SYNCHRONISATION MIT BACKEND - BEISPIEL POST /api/processes > 201 Created { "links": { "_self": "/api/processes/4711", "revoke": "/api/processes/4711/actions/revoke", "submit": "/api/processes/4711/actions/submit" }, "state" : "created", "data" : {} }

SYNCHRONISATION MIT BACKEND - BEISPIEL PUT /api/processes/4711/actions/submit > 202 Accepted { "links": { "_self": "/api/processes/4711", "revoke": "/api/processes/4711/actions/revoke" }, "state" : "submitted", "data" : {} }

FAZIT

THE GOOD großes Ökosystem, viele Erweiterungen (angulartranslate) gibt Strukturen vor weite Verbreitung viele Informationsquellen

THE BAD hohe Komplexität des Frameworks aufwändige Einarbeitung anfällig für Performance-Probleme viele Möglichkeiten für unwartbare Implementierung

THE UGLY eigenes Modulsystem schwer zu debuggen Verbose: "Javascript EE" Entwickler programmieren "Angular", verstehen aber wenig von Javascript

AUSBLICK Angular 1.x weiter verwenden spannend: Migration zu Angular 2 Alternativen (z.b. React, Polymer) beobachten

VIELEN DANK FÜR IHRE AUFMERKSAMKEIT!