Download - "ZenQuery - Enterprise Backend as a Service" - Single Page Applications mit AngularJS und Spring MVC
- Björn Wilmsmann -
ZenQuery - Enterprise Backend as a Service
Single Page Applications mit AngularJS und Spring MVC
ZenQuery
• Enterprise Backend as a Service
• Unternehmen horten Daten in Silos
• ZenQuery macht diese Daten verfügbar
• REST APIs für Datenbanktabellen und SQL Queries
• SELECT * FROM … -> JSON, XML, CSV …
Technologien
• AngularJS
• Spring Web MVC
• REST
• JSON
• JdbcTemplate
• PostgreSQL (und H2, Oracle, MySQL …)
AngularJS
• Single Page Applications
• MVVM: Model View ViewModel
• MVW: Model View Whatever
• Two-Way Data Binding
• Directives
Single Page Apps
• UX ähnlich Desktop Anwendungen
• Sämtlicher Code - HTML, CSS, JS - wird beim ersten Aufruf vollständig geladen
• Keine vollständigen Reloads
• Statt dessen: Partielle DOM Aktualisierung
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
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
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
"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
Bootstrapping
• Initialaufwand ist bei Java immer noch sehr hoch (im Vergleich zu Rails und Co.)
• Maven, Jetty, Spring, you name it …
• Keine Single Best Practice hinsichtlich Struktur und Komponenten
• IDEs wie Intellij IDEA bieten Templates als Abhilfe
Links• http://www.zenqry.com/
• https://angularjs.org/
• http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html
• https://circleci.com/
• https://heroku.com/
• http://www.divshot.com/
Björn WilmsmannStefan-George-Str. 15a 46117 Oberhausen !
Website: http://wilmsmann.de eMail: [email protected] Tel.: +49-151-25209060