Entwurf und Implementierung eines Clojure-Treibers für ArangoDB – „Entwurf und Implementierung eines Clojure-Treibers für ArangoDB“ – Auf welchen Themen baut die Arbeit auf?



Entwurf und Implementierung eines Clojure-Treibers für ArangoDB – „Entwurf und Implementierung eines Clojure-Treibers für ArangoDB“ – Auf welchen Themen baut die Arbeit auf?

0 0


revealjs-slides

slides for presentations done in reveal.js, including my personal custom theme

On Github Lepetere / revealjs-slides

Entwurf und Implementierung eines Clojure-Treibers für ArangoDB

- Themen der Arbeit, Libraries und Tools - 2 Live Demos - Architektur von Clarango - Ergebnisse, Ausblick

„Entwurf und Implementierung eines Clojure-Treibers für ArangoDB“

Thema der Arbeit

Clojure Treiber?

= Clojure Client?

= HTTP-API Wrapper?

Clarango!

Auf welchen Themen baut die Arbeit auf?

Themen?

multimodel NoSQL

- Dokumente - Graphen - Key/Value

Themen?

funktionale Programmierung / Clojure

- der Treiber soll funktional und so zustandslos wie möglich umgesetzt werden

Themen?

REST / HTTP

- alle Kommunikation mit Clients läuft über HTTP

Themen?

leichtgewichtige Architektur

- den Datenbankanfragen möglichst wenig Overhead hinzufügen - kompakter Kern mit wiederverwendbaren Funktionen

Themen?

Design einer konsistenten, intuitiven und flexiblen API

- intuitiv zu verstehen - flexibel einsetzbar im Bezug auf kurze Funktionsaufrufe mit Default-Werten - ODER der Übergabe von weiteren Parametern mit Optionen nach Wahl

Verwendete Libraries und Tools

Versionsmanagement

git und Github

2 Libraries

clj-http und Cheshire

Projektlayout und Dependency-Management

Leiningen

							(defproject clarango-demo "0.1.0-SNAPSHOT"
  :description "Just a demo of the integration of the Clarango library..."
  :dependencies [[org.clojure/clojure "1.5.1"]
  				 [clarango "0.4.2"]]
)
						
- nach Upload auf Clojars ist Clarango selber als Library zur Einbindung in Leiningen verfügbar

Live Demo #1

Einbindung der Library mit Leiningen und Clojars.

Architektur von Clarango

Architektur

Namespace Diagramm insgesamt

- ArangoDB API Namespaces wurden zu einigen wenigen Namespaces zusammengefasst - z.B. query und graph Namespace - relativ kurze Methodenimplementierungen, da alle die selben Methoden der Utility Namespaces benutzen

Architektur

Namespace Diagramm: Aufruf einer document-Methode

Live Demo #2

Anwendung einer document-Methode sowie einer collection-ops-Methode als Alternative dazu.

Ergebnisse

Ergebnisse

Agile Entwicklung

  • Es konnte ohne Umwege mit der Entwicklung und ersten Tests begonnen werden
  • Sehr produktiv!
  • Und motivierend

Ergebnisse

Architektur

  • HTTP-API Wrapper lässt sich mit sehr wenig Overhead umsetzen
  • viele wiederverwendbare Komponenten entworfen

Ergebnisse

Praxisbezug

Problem: Design-Entscheidungen treffen ohne Anwendungsfall

Ergebnisse

Testing

  • TDD dauert lang/unproduktiv
  • "quick and dirty" Tests in main.clj funktionieren auch

Ergebnisse

Wahrnehmung in der Community

  • Clarango wurde in Blogs erwähnt
  • Pull Request!

Ausblick

  • Überprüfung der Eingabetypen
  • eigene Error-Klassen statt Standard-Java-Error-Klassen
  • vollständige ArangoDB HTTP-API implementieren

Ende

  • Code und Markup dieser Präsentation: https://github.com/Lepetere/revealjs-slides
  • www.peterfessel.com