prism
Ein Web-Framework in Ruby, das ausschließlich auf der Standardbibliothek basiert - ohne externe Gems. Router, Controller-Schicht, ein dateibasierter ORM mit Migrationen, Layouts und Partials.
Ein Web-Framework in Ruby, das ausschließlich auf der Standardbibliothek aufbaut. Keine externen Gems: ein eigener Router, eine Controller-Schicht, ein dateibasiertes ORM mit Migrationen, Layouts und Partials. Alles, was Sie sonst von Rails bekommen, von Grund auf geschrieben, um zu verstehen, wie es wirklich funktioniert.
Einführung
Rails ist großartig, aber wenn man es jahrelang nur benutzt, vergisst man leicht, wie es darunter arbeitet. prism ist ein bewusster Schritt eine Ebene tiefer: Es gibt hier kein einziges externes Gem, also musste jedes Teil gut genug verstanden werden, um es selbst zu schreiben. Routing, Dispatch an einen Controller, das Rendern einer View, die Datenschicht.
Das Ergebnis ist ein kleines Framework, das eine Anwendung tatsächlich ausliefert, und zugleich eine Landkarte dessen, was die Konkurrenz hinter dem Vorhang tut. Es ist keine Attrappe eines Frameworks, sondern ein funktionierendes Ganzes, in dem jede Schicht in Reichweite ist, weil man sie mit eigenen Händen geschrieben hat.
Ein Router, der den Pfad selbst entwirrt
Das Herz jedes Web-Frameworks ist die Entscheidung, welcher Code eine gegebene Anfrage bearbeitet. In prism ist diese Entscheidung explizit: Sie deklarieren Routen, und der Router ordnet Methode und Pfad einem Paar aus Controller plus Aktion zu und zieht dabei die Parameter aus den Adresssegmenten. Hier gibt es keine Magie, sondern eine Tabelle von Regeln, die von oben nach unten gelesen wird.
Wenn Sie den Dispatch selbst schreiben, hört er auf, eine Blackbox zu sein. Sie sehen genau, wo ein Pfad zu einem Methodenaufruf wird, und genau dieses Wissen fehlt Ihnen, wenn das Framework es für Sie erledigt.
Die Daten- und View-Schicht ohne versteckten Kleber
Statt Postgres einzubinden, hält prism die Daten in Dateien und legt Migrationen plus einfache Abfragen darauf. Das reicht, um die ganze Schleife zu zeigen: Sie definieren ein Modell, führen eine Migration aus, speichern einen Datensatz und lesen ihn im Controller wieder aus. Die Datenbank verschwindet aus dem Blickfeld, und was oben bleibt, ist die reine Form, wie ein ORM Datensätze auf Objekte abbildet.
Die Beschränkung auf Dateien ist kein Mangel, sondern eine Entscheidung. Dank ihr passt die Datenschicht als Ganzes in den Kopf und versteckt keinen Schritt hinter einem Datenbanktreiber, den man ohnehin nicht sieht.
Das Rendern einer View wirkt trivial, bis Sie versuchen, sie aus Schichten zusammenzusetzen. prism hat Layouts, in die der Inhalt der Aktion eingespeist wird, und Partials, die wiederkehrende Teile zusammensetzen. Genau derselbe Mechanismus, der in großen Frameworks unsichtbar abläuft, ist hier eine explizite Funktion, die Sie selbst geschrieben haben.
Wenn alles von Hand geschrieben ist, bedeutet Debugging, den eigenen Code zu lesen, statt zu raten, was das Framework tut. Das ist der wichtigste Gewinn dieser Übung: Die Schicht, deren Verhalten Sie erschließen mussten, verschwindet einfach.
Eine Landkarte dessen, was Rails hinter dem Vorhang verbirgt
Der größte Gewinn aus prism ist nicht das Framework selbst, sondern das, was nach dem Schreiben im Kopf bleibt. Router, Controller und ORM passen zusammen in ein paar hundert Zeilen lesbares Ruby, und jede dieser Zeilen entspricht einem Teil, den Rails hinter dem Vorhang erledigt. Nach dieser Übung hört ein großes Framework auf, Magie zu sein, und wird zu einer Menge von Entscheidungen, die Sie verstehen.
Woher normalerweise, und woher in prism
| Element | Normalerweise von der Stange | In prism |
|---|---|---|
| Routing | Rails | eigener Router von Grund auf |
| Datenschicht | ActiveRecord | dateibasiertes ORM mit Migrationen |
| Views | ActionView | Layouts und Partials von Hand |
| Abhängigkeiten | Dutzende Gems | null, nur stdlib |
Weitere Projekte
Weitere Projekte aus derselben Kategorie - sehen Sie, wie wir ähnliche Herausforderungen angehen.
Haben Sie ein ähnliches Projekt?
Melden Sie sich - ein Angebot ist kostenlos und kommt innerhalb einer Stunde.



