Motivation und Hintergrund

Ich habe diese App gebaut als Pilotprojekt zum Erlernen von Ruby on Rails als neue Programmiersprache und neues Framework. Wer mir einen Hinweis zur App geben möchte, sei es funktionaler Art oder weil er einen Bug gefunden hat, ist herzlich eingeladen, mir eine Email zu schreiben an info@heiniger-net.ch.

In der App umgesetzte Features

Architektur

Das System folgt einer sauberen, losgekoppelten Schichtenarchitektur (Layered Architecture) innerhalb des Ruby-on-Rails-Monolithen, um Geschäftslogik, Datenhaltung und Benutzeroberfläche klar voneinander zu trennen.

  1. Presentation Layer (Präsentationsschicht): Verantwortlich für das Rendering der Benutzeroberfläche und die Darstellung der Ergebnisse. Neben klassischen Views beinhaltet diese Schicht auch die Template-Engine für den PDF-Export, damit Nutzer ihre Analysen in einem sauberen Format herunterladen können.
  2. Controller Layer (Steuerungsschicht): Nimmt die HTTP-Requests entgegen, steuert den Programmfluss und delegiert die Aufgaben. Hier ist unter anderem der Google-OAuth-Login integriert, der die sichere Authentifizierung der Nutzer über externe Provider abwickelt.
  3. Service Layer (Logik-Schicht / Fachlichkeit): Das Herzstück für die Domain-Logik. Um die Controller schlank zu halten (“Skinny Controllers, Fat Models/Services”), sind die komplexen mathematisch-kabbalistischen Berechnungsvorschriften (Gematria-Algorithmen) in eigene Service-Klassen ausgelagert.
  4. Model und Persistence Layer (Datenhaltungsschicht): Nutzt ActiveRecord als Object-Relational Mapper (ORM). Hier wird die objektorientierte Welt auf die relationale Datenbank abgebildet. Kernstück ist das ERM (Entity-Relationship-Model) mit zwei fachlich verknüpften Tabellen über Foreign Keys (z. B. die Verknüpfung von Benutzern mit ihren gespeicherten Analysen/Historien).
  5. Database Layer (Datenbankschicht): Die physische Speicherung der Daten in einer relationalen Datenbank (PostgreSQL/SQLite), gewährleistet durch standardkonforme Migrationen.

MVC

Das Model-View-Controller-Prinzip, mit dem Ruby-on-Rails arbeitet, funktioniert so:

State Engine

Das Erfassungsformular des Hauptbildschirms wird gemäss dieser State Engine mit Daten vorausgefüllt: