ZenQuery - Enterprise Backend as a Service

Werbung
ZenQuery - Enterprise
Backend as a Service
Single Page Applications
mit AngularJS und Spring MVC
- Björn Wilmsmann -
ZenQuery
•
•
•
•
Enterprise Backend as a Service
•
SELECT * FROM … -> JSON, XML, CSV …
Unternehmen horten Daten in Silos
ZenQuery macht diese Daten verfügbar
REST APIs für Datenbanktabellen und SQL
Queries
Technologien
•
•
•
•
•
•
AngularJS
Spring Web MVC
REST
JSON
JdbcTemplate
PostgreSQL (und H2, Oracle, MySQL …)
Warum Spring Web
MVC?
Warum AngularJS?
"I’ll use Go, Rust and
MongoDB for the
back end and Dart or
CoffeeScript for the
front end"
WTF?!
Problemlösungen
statt Technologie
als Selbstzweck
AngularJS
•
•
•
•
•
Single Page Applications
MVVM: Model View ViewModel
MVW: Model View Whatever
Two-Way Data Binding
Directives
Single Page Apps
•
•
UX ähnlich Desktop Anwendungen
•
•
Keine vollständigen Reloads
Sämtlicher Code - HTML, CSS, JS - wird
beim ersten Aufruf vollständig geladen
Statt dessen: Partielle DOM Aktualisierung
Model
•
•
•
Services
Factories
Providers
View
•
•
Directives
•
wieder verwendbare HTML View
Komponenten
•
eigene HTML Tags
{{ interpolated_variables }}
ViewModel
•
•
Controllers
•
nicht mit Controller aus MVC zu
verwechseln
•
eher: Scope
Modules
•
fassen Features und wiederverwendbare
Komponenten logisch zusammen
Dependency Injection
•
•
Von Spring "abgeguckt"
Abhängigkeiten können wo benötigt
eingebunden werden
•
•
•
Controller
Service
…
Routing
•
Erlaubt Zuordnung von Controllern und
Views zu URLs und Parametern
•
Erlaubt Deep Links in Single Page
Applications
•
/ui/index.html#/databaseConnections
Services
•
•
•
•
Einbindung externer Ressourcen
z.B. REST APIs
Shared Functionality
Entsprechen dem Model
Kommunikation
•
•
•
$scope
Dient dem Austausch von Daten
Two-Way Data Binding
•
•
völlig automatisch … meistens
$scope.$apply
Exkurs: Promises
•
•
•
•
JavaScript ist single-threaded
Nebenläufigkeit über Events
Callbacks und Callback Hell
Promises: Einfache Syntax auch für
komplexe Callback Szenarios
Exkurs: Promises
Exkurs: Promises
Testbarkeit
•
•
•
•
AngularJS: Testbarkeit als Design Kriterium
Jasmine: BDD Framework
BDD: Behaviour Driven Development
e2e Testing: Protractor
Spring Web MVC
•
•
•
•
•
Eigenes Spring Web Framework
"Antwort" auf Probleme mit Struts
Request-basiert
Eng mit Servlet API gekoppelt
Aber: Hohes Abstraktionsniveau
AbstractInterruptibleBatch
PreparedStatementSetter
and
AbstractSingleton
ProxyFactoryBean
no more!
Subjektiv: Spring 4 geht
deutlich leichter von der
Hand als frühere Spring
Versionen.
Spring Web MVC
•
•
•
•
•
•
•
URL Mapping
Controllers
Views
Forms
Form Tags
Model: Key-Value Map
Annotations
Annotations
•
•
•
•
•
•
•
@Controller
@RequestMapping
@ResponseBody
@PathVariable
@MatrixVariable
@RequestMethod
@RequestParam
Spring als REST
Backend
•
•
•
•
Controller dienen als REST API Endpoints
Views sind JSON, XML, CSV Ausgaben
POJOs automatisch in JSON konvertiert
Werden vom Front End weiter verarbeitet
Ein paar gängige
Probleme …
"There are only two hard
things in Computer Science:
Cache invalidation, naming
things, and off-by-one
errors."
Caching
•
•
•
•
•
Wann sollte man REST Anfragen cachen?
Wann sollte man den Cache leeren?
It depends …
SELECT, INSERT, UPDATE, DELETE
@Cacheable, @CacheEvict
CORS
•
•
•
•
•
Cross-Origin Resource Sharing
JavaScript Beschränkung
Request nur innerhalb des gleichen Hosts
Problem während der Entwicklung
Eigener Response Header nötig:
CORSFilter
XML Conversion
•
XML Konvertierung von Java Objekten
funktioniert nicht out-of-the-box
•
•
•
Jackson
XStream
MapEntryConverter
CSV Ausgabe
•
•
•
Muss manuell programmiert werden
Eigener CSV Builder
StringBuilder
Bootstrapping
•
Initialaufwand ist bei Java immer noch
sehr hoch (im Vergleich zu Rails und Co.)
•
•
Maven, Jetty, Spring, you name it …
•
IDEs wie Intellij IDEA bieten Templates als
Abhilfe
Keine Single Best Practice hinsichtlich
Struktur und Komponenten
Build Prozess
ZenQuery
Links
•
•
•
http://www.zenqry.com/
•
•
•
https://circleci.com/
https://angularjs.org/
http://docs.spring.io/spring/docs/current/
spring-framework-reference/html/mvc.html
https://heroku.com/
http://www.divshot.com/
Björn Wilmsmann
Stefan-George-Str. 15a
46117 Oberhausen
!
Website: http://wilmsmann.de eMail: [email protected]
Tel.: +49-151-25209060
Herunterladen