Eine Gruppe von Freunden und ich haben in der letzten Zeit an einem Projekt gearbeitet, und wir wollten eine nette OOP-Methode erfinden, um ein für unser Produkt spezifisches Szenario darzustellen. Grundsätzlich arbeiten wir an einem Bullet-Hell-Spiel im Touhou-Stil , und wir wollten ein System entwickeln, in dem wir jedes mögliche Verhalten von Bullets, das wir uns erträumen können, einfach darstellen können.
Genau das haben wir getan. Wir haben eine sehr elegante Architektur entwickelt, die es uns ermöglicht, das Verhalten eines Aufzählungszeichens in verschiedene Komponenten zu unterteilen, die nach Belieben an Aufzählungszeicheninstanzen angehängt werden können, ähnlich wie das Komponentensystem von Unity . Es funktionierte gut, es war leicht erweiterbar, es war flexibel und deckte alle unsere Basen ab, aber es gab ein kleines Problem.
Unsere Anwendung erfordert auch eine große Menge an prozeduraler Generierung, dh, wir generieren prozedural das Verhalten der Aufzählungszeichen. Warum ist das ein Problem? Nun, unsere OOP-Lösung zur Darstellung des Verhaltens von Kugeln ist zwar elegant, aber ein wenig kompliziert, ohne einen Menschen zu arbeiten. Menschen sind klug genug, um Lösungen für logische und kluge Probleme zu finden. Prozedurale Generierungsalgorithmen sind noch nicht so intelligent, und wir haben es schwierig gefunden, eine KI zu implementieren, die unsere OOP-Architektur in vollem Umfang nutzt. Zugegeben, das ist ein Fehler der Architektur, dass sie nicht in allen Situationen intuitiv ist.
Um dieses Problem zu beheben, haben wir im Grunde alle von verschiedenen Komponenten angebotenen Verhaltensweisen in die Aufzählungsklasse verschoben, sodass alles, was wir uns jemals vorstellen konnten, direkt in jeder Aufzählungsinstanz und nicht in anderen zugeordneten Komponenteninstanzen angeboten wird. Dies macht es ein wenig einfacher, mit unseren Algorithmen zur Prozedurgenerierung zu arbeiten, aber jetzt ist unsere Bullet-Klasse ein riesiges Gott-Objekt . Es ist mit Abstand die größte Klasse im Programm, mit mehr als fünfmal so viel Code wie alles andere. Es ist ein bisschen mühsam, das auch beizubehalten.
Ist es in Ordnung, dass sich eine unserer Klassen in ein Gott-Objekt verwandelt hat, um es einfacher zu machen, mit einem anderen Problem zu arbeiten? Ist es im Allgemeinen in Ordnung, Codegerüche in Ihrem Code zu haben, wenn eine einfachere Lösung für ein anderes Problem zugelassen wird?