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

PDF
Javascript done right
PDF
Javascript auf Client und Server mit node.js - webtech 2010
PDF
Schöne neue Welt von HTML5 - WebTech 2010 Mainz 12.10.2010
ODP
Websemantik: Die nächsten Schritte
PDF
Schöneres Web mit HTML5 + CSS3
PDF
Refactoring developer habits
PDF
What's new in java 8
PPTX
Raspberry Pi with Java (JJUG)
Javascript done right
Javascript auf Client und Server mit node.js - webtech 2010
Schöne neue Welt von HTML5 - WebTech 2010 Mainz 12.10.2010
Websemantik: Die nächsten Schritte
Schöneres Web mit HTML5 + CSS3
Refactoring developer habits
What's new in java 8
Raspberry Pi with Java (JJUG)

Andere mochten auch (13)

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

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

PDF
Jax2013 JavaScript für Java-Entwickler
PDF
JavaScript für Java-Entwickler W-JAX 2013
PDF
JavaScript und trotzdem Softwerker
PDF
Moderner Webentwicklungs-Workflow
ODP
Einfuehrung in ExtJS 4
PPT
Webtechnologien fuer das Frontend und Flash( Flex ) Vs Js( Ajax )
PPT
Webtechnologien für das Frontend & Javascribt( AJAX ) vs Flash( Flex )
Jax2013 JavaScript für Java-Entwickler
JavaScript für Java-Entwickler W-JAX 2013
JavaScript und trotzdem Softwerker
Moderner Webentwicklungs-Workflow
Einfuehrung in ExtJS 4
Webtechnologien fuer das Frontend und Flash( Flex ) Vs Js( Ajax )
Webtechnologien für das Frontend & Javascribt( AJAX ) vs Flash( Flex )
Anzeige

Mehr von Java Usergroup Berlin-Brandenburg (18)

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

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