Hey!
Es klingt ein bisschen, als ob du dich angegriffen fühlst.
Selbstverständlich wenn erstmal so eine Eröffnung (inklusive Ausführung) kommt
"Da würde ich jetzt erstmal ganz simpel sagen: Na und?
Und zweitens würde ich mich fragen, was das denn für eine grausame Funktion ist?"
Wenn es bislang nur um "rohe" Klassen ging und keine einzige Zeile Code und auch nicht der Zusammenhang bekannt sind, so einzusteigen, hat schon was für sich.
Weiterhin hast du nur das direkte Problem erwähnt und nicht das Umfeld beschrieben. Da lässt sich schwer herauslesen, warum er so aussieht wie er jetzt ist und vor allem schlecht einschätzen, ob das zur Zielerreichung dienlich ist oder doch lieber was ganz anderes gemacht werden sollte. Deswegen kann es auch gut sein, dass Tipps für den Augenblick gut scheinen aber im großen Ganzen doch nicht optimal sind.
Genau. Wie kann man also erstmal reinpoltern ohne zu wissen um was es geht aber direkt alles in Grund und Boden stampfen? Nein danke, darauf kann ich dann auch verzichten. Ich werde mir Svens Vorschläge/Hinweise anschauen aber hier hat sich der thread für mich erstmal erledigt.
Einige der Parameter des Objekts sind aber optional und wenn du sie nicht durch ein Array kapselst, dann ist es besser, wenn sie hinten stehen und die beiden anderen Pflichtparameter nicht behindern.
Und wann habe ich gesagt, dass ich das so mache? Bis jetzt waren alles nur Überlegungen wie ich es umsetzen _könnte_.
Das kann man erst sagen, wenn man die Hintergründe kennt. Versuch mal bitte etwas konkreter und nicht so abstrakt zu beschreiben, was du vorhast.
Da gibt es nichts zu beschreiben weil ich (fast) nur mit rohen Klassen zum testen arbeite.
Eine Funktion sammelt Informationen über verschiedene Model. Die Model erweitern alle eine Elternklasse, was aber nicht bedeutet, dass sie zwangsläufig die selben Konstruktoren besitzen müssen. Eine Andere Funktion bildet eine Schnittmenge mit den tatsächlich benötigten Models und initialisiert die entsprechenden Klassen.
"Cheeseburger" braucht zum Beispiel die Model "Cheese('gauda', '1 scheibe')" und "Burger('weizenbrötchen', '1 formfleisch', '2 scheiben gurken', 'zwiebeln')".
"Hamburger" braucht nur "Burger".
Meine Funktion sammelt also "Cheese" und "Burger" und für welchen Burger sie gebraucht werden - übergeben von einer Controller-Funktion.
Z.B. Cheeseburger: Cheese('gauda', '1 scheibe'), Burger('weizenbrötchen', '1 formfleisch' /* , ..*/)
DoppelWopper: Cheese('gauda', '2 scheiben'), Burger('weizenbrötchen', '2 formfleisch', '4 scheiben gurken')
Eine andere Controller-Funktion sucht nun alle Model die für einen bestimmten Burger gebraucht werden. Also zu Cheeseburgern den Cheese und zu Hamburgern nicht. Cheese wird also "aussortiert" und nicht erst ausgepackt und drauf gelegt und nach dem Vergleich wieder runter genommen. Speicher hin oder her (wenn sich nicht mal der Experte sicher ist), das ist einfach unlogisch.
Ich werde dem Hinweis von Sven bezüglich Decorator-Patterns erstmal nachgehen und ansonsten meine favorisierte Version mit dem Array-Key-Value-Paar umsetzen.