SlideShare ist ein Scribd-Unternehmen logo
1 von 75
Downloaden Sie, um offline zu lesen
Die fabelhafte Welt
Java(Script)-getriebener Enterprise-WebApps
Dienstag, 8. Oktober 13
Guten Abend!
Aron Homberg - http://www.aron-homberg.de
Dienstag, 8. Oktober 13
Enterprise
WebApps
Dienstag, 8. Oktober 13
Dienstag, 8. Oktober 13
Dienstag, 8. Oktober 13
Dienstag, 8. Oktober 13
Frontend-
Anforderungen
Mandantenfähigkeit
Mehrsprachigkeit
White-Label-fähig
Komplexes User/Rollen-Konzept
Komplexe Grids, Tree‘s und Charts
Statuspersistenz der Benutzeroberfläche
Responsive Design
HTML5, CSS3: Flat Design
Dienstag, 8. Oktober 13
Interactive Layouts
Responsive Design
Dienstag, 8. Oktober 13
AJAX-enabled
Client Pre- und Server-Validation
Dienstag, 8. Oktober 13
Sortable
Filterable
Pagination Grouping
Locking
User-
Customizable
Dienstag, 8. Oktober 13
Big Data?
Infinite Scrolling!
Dienstag, 8. Oktober 13
Buffered Loading
SortableFilterable
Dienstag, 8. Oktober 13
Plugin-Free
InteractiveAggregatable
Dienstag, 8. Oktober 13
Frameworks zur Auswahl
...und ca. 10-15 weitere
Dienstag, 8. Oktober 13
Dienstag, 8. Oktober 13
+ +
CSS-FrameworkMicro-JS-Frameworks
10+ Plugins 100+ CSS-Classes
25.000+ LOC
eigener JS-Code
Gewählte Frameworks
+
Dienstag, 8. Oktober 13
3 Monate später...
1000+ Entwicklerstunden
30 Tage hinter Roadmap
200+ offene JS-Bugs im Tracker
Cross-Browser-Probleme
Dienstag, 8. Oktober 13
Komplexitäts-Desaster
Dienstag, 8. Oktober 13
Rewrite!
Dienstag, 8. Oktober 13
Von Micro-Frameworks
abgedeckte Features
Anforderungen
der
Enterprise-Web-App
Dienstag, 8. Oktober 13
Micro Universell
etc.
Dienstag, 8. Oktober 13
HTML-Code muss selbst
entwickelt werden
CSS-Code muss selbst
entwickelt werden
Responsive Design,
Statefulness, Client/Server-
Kommunikation etc. muss
selbst entwickelt werden
etc.
Micro
Dienstag, 8. Oktober 13
Wenig vorgefertigte
Komponenten (Out-of-the-
Box) vorhanden:
Keine Grids
Keine Trees
Keine Menü/Toolbar‘s
Keine Layout-Manager
etc.
Micro
Dienstag, 8. Oktober 13
Daher oft Kombination mit
Drittanbieter-Komponenten:
- jqGrid
- jsTree
- Twitter Bootstrap etc.
- Make or Buy?
Konsequenzen:
- Komplexität?
- Mischung von Konzepten?
- Drittanbieter-Qualität?
etc.
Micro
Dienstag, 8. Oktober 13
Pro!
Geringer Footprint
Leicht erlernbar
Leichtgewichtiges MVC*
Leicht anzupassen
-> Für Websites / kleine
WebApps (Multi Page)
ausgelegt
etc.
Micro
Dienstag, 8. Oktober 13
HTML-Code wird zur
Laufzeit (im Browser) vom
Framework generiert
CSS-Code wird mitgeliefert
(„Themes“), lässt sich
aber auch anpassen
Viele Komponenten sind
bereits vorhanden und
bilden ein konsistentes
Gesamtwerk
Universell
Dienstag, 8. Oktober 13
Out-of-the-Box
MVC, Data-Binding
Layout-Manager
Grids, Trees
Menus & Toolbars
Forms
Cross-Browser-Shim
Universell
Dienstag, 8. Oktober 13
Einheitliche Code-Basis &
Qualität
Umfangreiche
Dokumentation
Wenige bis keine
Drittanbieter-Komponenten
Gutes Tooling
Universell
Dienstag, 8. Oktober 13
Con!
Größerer Footprint
Steile Lernkurve
Anpassungen erfordern
eher Eingriffe ins
Framework selbst
-> Eher für WebApps/
Single-Page ausgelegt
Universell
Dienstag, 8. Oktober 13
Dienstag, 8. Oktober 13
http://vimeo.com/22863837
Dienstag, 8. Oktober 13
Object-oriented
programming
1.
Dienstag, 8. Oktober 13
Ext JSJava
class HelloWorld {
protected String
text = null;
public HelloWorld() {
this.text = „Hello!“;
}
}
new HelloWorld();
Ext.define("HelloWorld", {
text: null,
constructor: function() {
this.text = "Hello!";
}
})
new HelloWorld();
Dienstag, 8. Oktober 13
Ext JSJava
class HelloWorld
extends WhatEver {
...
}
Ext.define("HelloWorld", {
extend: "WhatEver",
...
})
Dienstag, 8. Oktober 13
Ext JSJava
class HelloWorld
implements WhatEver {
...
}
Sorry!
No interfaces ;-)
Dienstag, 8. Oktober 13
Ext JSJava
namespace foo;
class HelloWorld {
...
}
Ext.define("foo.HelloWorld",
{
...
})
Dienstag, 8. Oktober 13
Autoloading
2.
Dienstag, 8. Oktober 13
Ext JSJava
import foo.Bar;
class HelloWorld {
...
// foo.Bar ist in
// Attributen und Methoden
// automatisch bekannt
}
Ext.define("HelloWorld", {
requires: ["foo.Bar"],
...
// foo.Bar ist in
// Methoden der Klasse
// automatisch bekannt
})
Dienstag, 8. Oktober 13
Ext JSJava
ClassLoader-Techniken zum
Nachladen von ByteCode
aus .class-Files oder JAR‘s.
<zu viel Code für diese
Slide>
Ext.require("foo.Bar",
function onClassLoaded() {
new foo.Bar();
});
Dienstag, 8. Oktober 13
Cross-Browser
abstraction layer
3.
Dienstag, 8. Oktober 13
Ext.dom.CompositeElement
Ext.dom.Element
HTML Inline Styles
Low-Level-Abstraction-API
Dienstag, 8. Oktober 13
Ext.dom.Element
Abstraktion des DOM-
Eventing (35 Events)
166 Methoden für die
Arbeit mit DOM-Elementen
(Cross-Browser-Shimed)*
AJAX-Helper Methods
Animations-Framework:
Ext.fx.*
CSS3-Selektor-basiertes
Querying
Cross-Browser Drag &
Drop-API mittels Ext.dd.
Mehr als das gesamte jQuery-Feature-Set!
Dienstag, 8. Oktober 13
Components &
Containers
4.
Dienstag, 8. Oktober 13
Ext.container.Container
Ext.Component‘s
Ext.dom.Element‘s
High-Level API: Konfiguration von
Oberflächen in JSON-Notation!
Dienstag, 8. Oktober 13
Remember: Swing?
Ext.define("App.view.Viewport", {
extend: "Ext.container.Viewport",
layout: "border",
items: [{
region: "west",
xtype: "panel",
title: "West",
width: 150,
}, {
region: "center",
html: "Hello, World!"
}]
});
Dienstag, 8. Oktober 13
Component‘sContainer‘s
Ext.button.Button
Ext.Img
Ext.LoadMask
Ext.menu.Item
Ext.form.Label
...
Ext.panel.Panel
Ext.container.Viewport
Ext.grid.Panel
Ext.menu.Menu
Ext.form.Panel
...
Dienstag, 8. Oktober 13
Observer-Pattern!
Jede Komponente „wirft“ zahlreiche Events (25+)
An jedes Ereignis dass eintritt, kann eigener
Programmcode gekoppelt werden
Eigener Programmcode kann das Standard-
Verhalten des Frameworks beeinflussen
Dienstag, 8. Oktober 13
Layouting
5.
Dienstag, 8. Oktober 13
Ext.container.Container
Container‘s / Component‘s
Ereigns-getriebenes-ReLayouting
-> Responsive Design
Out-of-the-Box!
Resize, Reposition, Visibility-Events
Re-Layout-Prozess
Dienstag, 8. Oktober 13
Swing-LayoutExt JS-Layout
Border
Box
Card
GridBag
Border
HBox, VBox
Card
SubLayouting
Accordion,
Absolute,
Anchor, ...
FlowAuto oder Anchor
Dienstag, 8. Oktober 13
Strong MVC
6.
Dienstag, 8. Oktober 13
Components / Container
„werfen“ Ereignisse
Design nach dem Observer-Pattern.
Controller‘s „fangen“ Ereignisse
Behandelnde Logik
Dienstag, 8. Oktober 13
Lose Kopplung
Ext.define("App.controller.FooGrid", {
extend: "Ext.app.Controller",
init: function() {
this.control({
"#fooGrid": {
"load": this.onGridLoad
}
});
},
onGridLoad: function(gridCmp) {
...
}
});
Dienstag, 8. Oktober 13
Client-Side
Data Management
7.
Dienstag, 8. Oktober 13
Ext.data.Model
fields
Instanzen
Ext.data.Store
proxy associations
„Records“
nachgeladen lokal erzeugt
sort filter group
Verwaltet in
Dienstag, 8. Oktober 13
Ext.data.Store
fields
Ext.grid.Panel
proxy associations
Ajax / REST / JSON-RPC
Ext.data.Operation
Ext.tree.Panel
„load“-Event
View-Komponenten „fangen“ das
„load“-Event des Store‘s
Server
HTTP(S)
Dienstag, 8. Oktober 13
Tools:
Next-Gen Theming
8.
Dienstag, 8. Oktober 13
Große Mengen CSS?
CSS3 wird aus der modularen SASS-Metasprache
generiert (Open Soure; http://sass-lang.org)
Ältere Browser (Internet Explorer) beherrschen
CSS3-Features nicht. Ext JS rendert CSS3-Effekte
automatisch als Image-Sprites.
Neue Themes (Custom CI) kann ohne Änderung
großer CSS-Codemengen durch „Vererbung“ und
Änderung von SCSS-Variablen erreicht werden.
Dienstag, 8. Oktober 13
Tools:
Building & Deploy
9.
Dienstag, 8. Oktober 13
Sencha CMD
cmd> sencha compile
Erkennt die Abhängigkeiten im Projekt
(Autoloader) und erstellt optimierte
Gesamt-Builds.
app-debug.js und app.js („compiled“)
Dienstag, 8. Oktober 13
Tools:
Testing
10.
Dienstag, 8. Oktober 13
Bryntum Siesta
bryntum.com/products/siesta
Ext JS-oriented Unit Testing
Spezielle API für Ext JS-Oberflächen-Tests
Automatisierbar (Continues Integration)
Oberfläche zum Interaktiven Ausführen der Tests
Tests müssen programmiert werden
kommerziell
Dienstag, 8. Oktober 13
Selenium IDE
docs.seleniumhq.org/projects/ide/
„Record & Replay“-Verfahren
Keine Implementierung von Tests notwending
Für einfache „Fire Tests“ geeignet (kann nicht alle
Komponenten-Ereignisse von Ext JS aufzeichnen)
Bei komplexen Ext JS-Oberflächen mit dynamisch
generierten Anteilen fehleranfällig.
Open Source
Dienstag, 8. Oktober 13
Royal Test Suite
In der Beta-Phase
„Record & Replay“-Verfahren
Keine Implementierung von Tests notwending
Durch intelligente Algorithmen können komplexeste
Web-Anwendungen getestet werden. (Ext JS, SAP
Web UI‘s, etc.)
Automatisierbar
kommerziell
Dienstag, 8. Oktober 13
Tools:
Documentation
11.
Dienstag, 8. Oktober 13
JSDuck
docs.sencha.com
Vollständige API-Dokumentation von Ext JS
Guides
Videos
Live-Examples in der API-Dokumentation
Code-Beispiele
Dienstag, 8. Oktober 13
JSDuck
cmd> jsduck
Generiert eine interaktive API-
Dokumentation auf Basis der eigenen
Quellcode-Dokumentation.
Dienstag, 8. Oktober 13
Mobile?
12.
Dienstag, 8. Oktober 13
Sencha Touch
Sencha Touch basiert auf Ext JS
Oberflächen-Komponenten angepasst
Zugriff auf Native API‘s
Via PhoneGap / Cordova auch „Quasi-Nativ“ /
App Store fähig
Für alle Mobile-Plattformen mit WebKit-basiertem
Web-Browser
Dienstag, 8. Oktober 13
FastBook
http://vimeo.com/55486684
Dienstag, 8. Oktober 13
Tooling:
Sencha Architect
13.
Dienstag, 8. Oktober 13
WYSIWYG für Ext JS
Dienstag, 8. Oktober 13
Lizensierung?
14.
Dienstag, 8. Oktober 13
Lizensierung
Ext JS
Non-Commercial: Free (GPLv3)
Commercial: per Developer/Major version
Sencha Touch
Commercial Free
Sencha Architect
Commercial
Dienstag, 8. Oktober 13
Building an App
in 15 Minutes
HURRY!
Dienstag, 8. Oktober 13

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (13)

JCrete Embedded Java Workshop
JCrete Embedded Java WorkshopJCrete Embedded Java Workshop
JCrete Embedded Java Workshop
 
Confessions of a Former Agile Methodologist
Confessions of a Former Agile MethodologistConfessions of a Former Agile Methodologist
Confessions of a Former Agile Methodologist
 
Raspberry Pi à la GroovyFX
Raspberry Pi à la GroovyFXRaspberry Pi à la GroovyFX
Raspberry Pi à la GroovyFX
 
Internet of Things Magic Show
Internet of Things Magic ShowInternet of Things Magic Show
Internet of Things Magic Show
 
Zombie Time - JSR 310 for the Undead
Zombie Time - JSR 310 for the UndeadZombie Time - JSR 310 for the Undead
Zombie Time - JSR 310 for the Undead
 
JavaFX on Mobile (by Johan Vos)
JavaFX on Mobile (by Johan Vos)JavaFX on Mobile (by Johan Vos)
JavaFX on Mobile (by Johan Vos)
 
OpenJFX on Android and Devices
OpenJFX on Android and DevicesOpenJFX on Android and Devices
OpenJFX on Android and Devices
 
RetroPi Handheld Raspberry Pi Gaming Console
RetroPi Handheld Raspberry Pi Gaming ConsoleRetroPi Handheld Raspberry Pi Gaming Console
RetroPi Handheld Raspberry Pi Gaming Console
 
Oracle IoT Kids Workshop
Oracle IoT Kids WorkshopOracle IoT Kids Workshop
Oracle IoT Kids Workshop
 
Confessions of a Former Agile Methodologist (JFrog Edition)
Confessions of a Former Agile Methodologist (JFrog Edition)Confessions of a Former Agile Methodologist (JFrog Edition)
Confessions of a Former Agile Methodologist (JFrog Edition)
 
Devoxx4Kids Lego Workshop
Devoxx4Kids Lego WorkshopDevoxx4Kids Lego Workshop
Devoxx4Kids Lego Workshop
 
What's New in Java 8
What's New in Java 8What's New in Java 8
What's New in Java 8
 
Built To Last - Nachhaltige Software-Entwicklung
Built To Last - Nachhaltige Software-EntwicklungBuilt To Last - Nachhaltige Software-Entwicklung
Built To Last - Nachhaltige Software-Entwicklung
 

Ähnlich wie Die fabelhafte Welt Java(Script)-getriebener Enterprise-WebApps (mit Ext JS)

Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010
Patrick Lauke
 
Nutze die Macht @ IKT-Forum 09 Linz
Nutze die Macht @ IKT-Forum 09 LinzNutze die Macht @ IKT-Forum 09 Linz
Nutze die Macht @ IKT-Forum 09 Linz
Eric Eggert
 
Browserbasiertes computing, RIA
Browserbasiertes computing, RIABrowserbasiertes computing, RIA
Browserbasiertes computing, RIA
Thomas Christinck
 
Cross-Platform Mobile Apps
Cross-Platform Mobile AppsCross-Platform Mobile Apps
Cross-Platform Mobile Apps
Martin Wittemann
 

Ähnlich wie Die fabelhafte Welt Java(Script)-getriebener Enterprise-WebApps (mit Ext JS) (20)

Ajax hands on - Refactoring Google Suggest
Ajax hands on - Refactoring Google SuggestAjax hands on - Refactoring Google Suggest
Ajax hands on - Refactoring Google Suggest
 
node.js
node.jsnode.js
node.js
 
jQuery & CouchDB - Die zukünftige Webentwicklung?
jQuery & CouchDB - Die zukünftige Webentwicklung?jQuery & CouchDB - Die zukünftige Webentwicklung?
jQuery & CouchDB - Die zukünftige Webentwicklung?
 
Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010
 
Mobile Web Development from Scratch
Mobile Web Development from ScratchMobile Web Development from Scratch
Mobile Web Development from Scratch
 
Einführung in die webOS Programmierung
Einführung in die webOS ProgrammierungEinführung in die webOS Programmierung
Einführung in die webOS Programmierung
 
Nutze die Macht @ IKT-Forum 09 Linz
Nutze die Macht @ IKT-Forum 09 LinzNutze die Macht @ IKT-Forum 09 Linz
Nutze die Macht @ IKT-Forum 09 Linz
 
Browserbasiertes computing, RIA
Browserbasiertes computing, RIABrowserbasiertes computing, RIA
Browserbasiertes computing, RIA
 
Web 2.0 Mit Der Yahoo User Interface Library
Web 2.0 Mit Der Yahoo User Interface LibraryWeb 2.0 Mit Der Yahoo User Interface Library
Web 2.0 Mit Der Yahoo User Interface Library
 
Schnittstellen und Webservices
Schnittstellen und WebservicesSchnittstellen und Webservices
Schnittstellen und Webservices
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Lasttest auf Zuruf CloudTest on Demand webinar presentation
Lasttest auf Zuruf CloudTest on Demand webinar presentationLasttest auf Zuruf CloudTest on Demand webinar presentation
Lasttest auf Zuruf CloudTest on Demand webinar presentation
 
Top 10 Internet Trends 2003
Top 10 Internet Trends 2003Top 10 Internet Trends 2003
Top 10 Internet Trends 2003
 
GWT
GWTGWT
GWT
 
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...
 
Cross-Platform Mobile Apps
Cross-Platform Mobile AppsCross-Platform Mobile Apps
Cross-Platform Mobile Apps
 
Grails 0.3-SNAPSHOT Presentation WJAX 2006
Grails 0.3-SNAPSHOT Presentation WJAX 2006Grails 0.3-SNAPSHOT Presentation WJAX 2006
Grails 0.3-SNAPSHOT Presentation WJAX 2006
 
Tech Talk: Groovy
Tech Talk: GroovyTech Talk: Groovy
Tech Talk: Groovy
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauen
 
XML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashXML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit Flash
 

Mehr von Java Usergroup Berlin-Brandenburg

Jbossas7alsplattformmodernerenterprise anwendungen-130604114410-phpapp02
Jbossas7alsplattformmodernerenterprise anwendungen-130604114410-phpapp02Jbossas7alsplattformmodernerenterprise anwendungen-130604114410-phpapp02
Jbossas7alsplattformmodernerenterprise anwendungen-130604114410-phpapp02
Java Usergroup Berlin-Brandenburg
 

Mehr von Java Usergroup Berlin-Brandenburg (18)

Microbenchmarks - Wer nicht weiß, was er misst misst Mist
Microbenchmarks - Wer nicht weiß, was er misst misst MistMicrobenchmarks - Wer nicht weiß, was er misst misst Mist
Microbenchmarks - Wer nicht weiß, was er misst misst Mist
 
Collections.compare(() -> JDK; Apache; Eclipse, Guava...});
Collections.compare(() -> JDK; Apache; Eclipse, Guava...});Collections.compare(() -> JDK; Apache; Eclipse, Guava...});
Collections.compare(() -> JDK; Apache; Eclipse, Guava...});
 
Feature Toggles On Steroids
Feature Toggles On SteroidsFeature Toggles On Steroids
Feature Toggles On Steroids
 
Resilience mit Hystrix
Resilience mit HystrixResilience mit Hystrix
Resilience mit Hystrix
 
Analysis of software systems using jQAssistant and Neo4j
Analysis of software systems using jQAssistant and Neo4jAnalysis of software systems using jQAssistant and Neo4j
Analysis of software systems using jQAssistant and Neo4j
 
Get Back in Control of your SQL
Get Back in Control of your SQLGet Back in Control of your SQL
Get Back in Control of your SQL
 
Selbstvorstellung Steria Mummert Consulting
Selbstvorstellung Steria Mummert ConsultingSelbstvorstellung Steria Mummert Consulting
Selbstvorstellung Steria Mummert Consulting
 
Graphdatenbanken mit Neo4j
Graphdatenbanken mit Neo4jGraphdatenbanken mit Neo4j
Graphdatenbanken mit Neo4j
 
Jbosseapclustering 130605100557-phpapp02
Jbosseapclustering 130605100557-phpapp02Jbosseapclustering 130605100557-phpapp02
Jbosseapclustering 130605100557-phpapp02
 
Jbossas7alsplattformmodernerenterprise anwendungen-130604114410-phpapp02
Jbossas7alsplattformmodernerenterprise anwendungen-130604114410-phpapp02Jbossas7alsplattformmodernerenterprise anwendungen-130604114410-phpapp02
Jbossas7alsplattformmodernerenterprise anwendungen-130604114410-phpapp02
 
How long can you afford to Stop The World?
How long can you afford to Stop The World?How long can you afford to Stop The World?
How long can you afford to Stop The World?
 
JavaOne Update zur Java Plattform
JavaOne Update zur Java PlattformJavaOne Update zur Java Plattform
JavaOne Update zur Java Plattform
 
Java EE 7 - Overview and Status
Java EE 7  - Overview and StatusJava EE 7  - Overview and Status
Java EE 7 - Overview and Status
 
Restructuring
RestructuringRestructuring
Restructuring
 
Fighting Layout Bugs
Fighting Layout BugsFighting Layout Bugs
Fighting Layout Bugs
 
Die Java Plattform Strategie
Die Java Plattform StrategieDie Java Plattform Strategie
Die Java Plattform Strategie
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
 
Continuous Delivery in der Praxis
Continuous Delivery in der PraxisContinuous Delivery in der Praxis
Continuous Delivery in der Praxis
 

Die fabelhafte Welt Java(Script)-getriebener Enterprise-WebApps (mit Ext JS)