Dungeon-CampusMinden / Dungeon

The "Dungeon" is a tool to gamify classroom content and integrate it into a 2D Rogue-Like role-playing game.
MIT License
17 stars 37 forks source link

Macht die Modellierung der Systeme als eigene Klassen Sinn? #1591

Open cagix opened 3 months ago

cagix commented 3 months ago

aus https://github.com/Dungeon-CampusMinden/Dungeon/issues/1587#issuecomment-2243275715:

Mittelfristig sollten wir nochmal drüber nachdenken, ob diese "fetten" Systeme so wirklich Sinn ergeben. Letztlich ist ein System i.d.R. nur eine zustandslose Funktion, die im Game registriert und dann zyklisch ausgeführt wird. Warum sollte ich dafür jeweils eine extra Klasse formulieren (müssen)? @AMatutat

Edit: Die Klasse System könnte diese Funktionen wie eine Factory-Klasse über statische Hilfsmethoden "produzieren", d.h. man hätte einen Ort (Klasse System) und einen Namen (Factory-Method), um an diese Callbacks dran zukommen für die Registrierung im Game.

Jedes System hat aktuell eine eigene Klasse. Durch die Vielzahl der Systeme hat man eine entsprechende Vielzahl an Einträgen im Package-Tree. Muss das wirklich so? Würde es nicht reichen, beispielsweise in System pro System eine Art "Factory"-Methode zu haben, die die jeweilige System-Funktion (aktuell als execute-Methode implementiert) als Function<Void,Void> zurückliefert?

Das Pausieren der Systeme müsste außerhalb der Systeme passieren. Das ist an sich ja auch keine Eigenschaft der Systeme, sondern des Game. Systeme selbst sind rein passive Funktionen (aktuell Funktionsobjekte) und werden von Game aufgerufen, wenn es Game in den Kram passt - warum sollte ein System dann wissen, ob es grad pausiert ist?

Potentielle Vorteile:

Potentielle Nachteile:

Edit: Gute Startpunkte für eine zusätzliche Recherche könnten Dominion (Java-ECS) und die ECS FAQ (via FLECS) sein.

AMatutat commented 3 months ago

Die Frage finde ich gut.

Darüber liegt für mich aber noch die Frage, wofür ist das Dungeon Framework noch gedacht? Ursprünglich wollten wir damit Java UND OOP vertiefen. Das spricht für mehr OOP und weniger Funktional. Mittlerweile ist der Fokuspunkt aber verschoben, oder?

cagix commented 3 months ago

Die Frage finde ich gut.

Darüber liegt für mich aber noch die Frage, wofür ist das Dungeon Framework noch gedacht? Ursprünglich wollten wir damit Java UND OOP vertiefen. Das spricht für mehr OOP und weniger Funktional. Mittlerweile ist der Fokuspunkt aber verschoben, oder?

@AMatutat Fokus verschoben weiss ich nicht. Es geht immer noch um eine Programmierausbildung auf einem fortgeschrittenen Level mit/in einer OO-Programmiersprache und um diverse Programmiermethoden (oder DevOps, wenn Du das so nennen wolltest).

Es ist halt nur so, dass nach der "langen Dürre der OO-Zeit" sich nun endlich "Regen am Horizont" abzeichnet und die Welt wieder vernünftiger wird und funktionale Konzepte (wieder) als sinnvoll erkennt, und das natürlich auch in Sprachen wie Java reinsickert.

Im Grunde mache ich immer noch objektorientierte Programmierung, aber mit funktionalem Touch (wo es sinnvoll ist - verbesserte Abstraktion, Lesbarkeit, Wartbarkeit, ...). So richtig viel geht da in Java ja sowieso nicht wirklich, und ziemlich viele Dinge sind extrem ... hässlich umgesetzt. Aber die Denkmuster ändern sich an einigen Stellen doch deutlich :)

Insofern würde ich nicht den Weg zurück zum ersten Dungeon gehen wollen (rein OO). Wir haben eine Mischform (Objektorientierte Programmierung, Funktionale Programmierung, Daten-orientierte Programmierung), und das ist auch gut so. Mein Ziel ist nur, den Zuschnitt weiter zu schärfen und die Modellierung sowie die Nutzbarkeit zu verbessern, also beispielsweise nicht unbedingt notwendigen mentalen Ballast über Bord zu werfen oder bestimmte Konzepte nochmal im Rückspiegel zu betrachten und ggf. zu korrigieren.