Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Seit meinem letztem letzten Blog-Post zum Thema Entwicklung unserer offenen Spieledatenbank ist nun schon mehr als ein Jahr vergangen. Das bedeutet aber nicht, dass ich nicht vorangekommen wäre. Daher möchte ich euch heute mal wieder vom aktuellen Stand der Entwicklung berichten.

In den letzten 15 Monaten habe ich versucht, unsere Spieledatenbank nach den Prinzipien des Domain Driven Design (DDD) neu zu durchdenken. Kurz gesagt konzentriert man sich dabei auf fachliche Kernbereiche oder Kontexte (DDD: "Bounded Contexts") der geplanten Anwendung. Diese sind dann bei der Umsetzung relativ lose untereinander gekoppelt, so dass jeder einzelne Kontext die eigene Fach-Logik komplett selber und relativ unabhängig umsetzen kann. Das macht die sinnvolle und effiziente Entwicklung von großen, komplexen Anwendungen überhaupt erst langfristig möglich. Für Oregami habe ich einige dieser Kontexte identifiziert und die groben Beziehungen untereinander in einer sog. sogenannten "Context Map" dargestellt:

...

Eine sehr große Hilfe bei den bisherigen Arbeiten ist das Axonframework Axon-Framework (http://www.axonframework.org/). Es unterstützt eben genau bei den jene Themen "Event Sourcing" und "CQRS", so dass man sich nahezu vollständig auf die Programmierung der fachlichen Dinge konzentrieren kann. Auch wenn so ein umfangreiches Framework natürlich vor dem Einsatz einiges an Einarbeitung erfordert , - was auch mit einer der Gründe ist, weshalb ich so lange nichts von mir habe hören lassen (smile) . Mittlerweile - so konnte ich aber mitlwerweile doch einige Muster erarbeiten, die ich dann in der Zukunft immer wieder einsetzen werde.

Als den Bereich, in dem wir als erstes Daten erfassen wollen, haben wie wir die Spieleplattformen ausgewählt (englisch für uns "Platforms" oder "Gaming Environments"). Wenn man Informationen über Spieleplattformen vernünftig erfassen und speichern möchte, kommt man ziemlich zu schnell zu dem Thema "Internationalisierung der Plattform-Bezeichnungen". Hier wenden wir unsere Diskussionsergebnisse aus dem Bereich der Spiele-Titel an, die wir umfassend in einem Blogbeitrag (https://www.oregami.org/blog/de/2017/gedanken-zur-internationalisierung-i18n) beschrieben haben.

Da wir das Erfassen von Bezeichnungen an mehreren Stellen im System benötigen werden und es eine wichtige Rolle in der Oregami-Datenwelt spielt, haben wir es zu einem eigenen Kontext befördert, den wir fortan "Transliterated Strings" nennen. Während dieser Kontext selber für den die Benutzer unserer Datenbank später nicht als einzelner, separat angebotener Bereich (z.B. in der Webseiten-Navigation) auftauchen wird, so werden seine Funktionen und Daten doch mehrfach innerhalb der anderen, öffentlichkeitswirksameren Bereiche verwendet werden. Innerhalb dieses Kontextes wird es z.B. möglich sein, zu jedem erfassten Titel (gilt auch für Spiele-Titel) Übersetzungen zu hinterlegen.

In der aktuellen Entwicklungs-Version Entwicklungsversion unserer Web-Anwendung habe ich erst einmal versucht, die beiden Kontexte "Platforms" und "TransliteratedStrings" zusammenzubringen. Denn darin wird zukünftig genau die Kunst bestehen: das Integrieren mehrerer Kontexte elegant zu lösen. Konkrete Konkret bedeutet das für uns: Bezeichnungen werden als "transliterierte Texte" (https://de.wiktionary.org/wiki/transliterieren) im entsprechenden Kontext erfasst, und der Plattformen-Kontext verweist an den richtigen Stellen auf die transliterierten diese Texte.

Los geht es zunächst damit, dass man eine neue Plattform im System anlegt. Da die ganzen Bezeichnungen erst später sehr detailliert erfasst werden können, gibt man bei der Erstanlage nur einen Arbeitstitel an.

...

Nun liegt also eine Plattform mit einem transliterierten Titel vor. Für diesen Titel kann man noch ergänzen, in welcher Region er in welcher Art und Weise verwendet wurde, also z.B. ist "Super Nintendo Entertainment System" ein Original-Titel in Europa:

Nach zwei weiteren internationalisierte Titel internationalisierten Titeln sieht es dann so aus:


Aber wir wären nicht Oregami, wenn das schon alles wäre.

...

Jedes dieser Events beinhaltet alle Daten, die man benötigt, um den letztendlich entstandenen Zustand der Plattform daraus abzuleiten. Genau das ist das Prinzip des Event Sourcings. Aber warum betreiben wir nun diese diesen ganzen Aufwand? Warum aktualisieren wir nicht einfach direkt die bisherigen Daten mit den vom Benutzer neu eingegebenen Daten?

Bei Oregami legen wir großen Wert auf die Qualität der abgelegten Informationen. Diese hohe Qualität wollen wir u.a. dadurch erreichen, dass an möglichst viele vielen Stellen bei Dateneingaben eine Quelle angegeben werden muss: woher können wir sonst sicher sein, dass diese Daten tatsächlich der Realität entsprechen? Außerdem sollte es in unserem System später möglich sein, Dateneingaben innerhalb eines Überprüfungsprozesses zu validieren und in irgendeiner Art und Weise als "geprüft" zu markieren. Das Abspeichern jeder Eingabe in den daraus entstandenen Events werden wird uns genau diese Dinge ermöglichen.

Quellenangaben wird man und z.B. den Events zuordnen können. Nach einer Überprüfung der Events werden wir die anzuzeigenden Daten zielgerichtet aktualisieren können, da wir diese wir nach dem CQRS-Prinzip komplett getrennt von den Events speichern. Es ist sogar möglich, mehrere sog. sogenannte "Read models" anzulegen, so dass z.B. Prüfer den neuesten Stand Datenstand inkl. aller ungeprüften Events einsehen können, während für die Öffentlichkeit nur überprüfte Daten sichtbar sein werden. Diese Dinge sind momentan noch Zukunftsmusik, aber mit dem aktuellen Entwicklungsstand haben wir die Basis dafür geschaffen.

Der aktuelle Stand kann übrigens auf https://dev.oregami.org ausprobiert werden (Login: User=user1, Passwort=password1). Die Daten werden aber noch nicht langfristig gespeichert, nach jeder Programmänderung gehen sie auch erstmal wieder verloren. Außerdem sei gesagt, dass das hinterlegte Datenmodell noch erweitert werden muss: wie in diesen Beiträge diesem Beitrag (https://www.oregami.org/blog/de/2015/sprung-ins-plattform-chaos) ausführlich beschrieben, bestehen Spiele-Plattformen bei uns aus Hardware- und Software-Plattformen, was aktuell noch nicht unterstützt wird. Aber anhand des aktuellen Standes konnte ich viele wichtige Dinge ausprobieren, erlernen und umsetzen.

...