Wieviel Aufwand für triviales Problem?
-
Hallo zusammen,
nachdem ich den ganzen Tag mit der Implementation verschiedener Strategy Patterns und Factories verbracht habe stelle ich mir doch die Frage, ab wann sich der Aufwand lohnt bzw. wie ihr solche Dinge handhabt.
In einem konkreten Beispiel von mir habe ich eine Datenstruktur, die je nach Kontext unterschiedlich interpretiert werden muss (bitte fragt nicht wieso... *seufz*).
Konventionell ist das bisher so gehandhabt worden, dass ein switch-case Block für die Fallunterscheidung des Kontextes benutzt wurde und je nach Kontext eine von vier Funktionen, die die Interpretation der Daten übernimmt. Führt leider zu riesigen Quelltextdateien, da so eine Struktur gerne 25 und mehr Datenelemente hat, mit denen auch noch etwas rumgerechnet werden muss, bevor die Ausgabe stattfinden kann.
Mit dem Strategy/Factory Pattern brauche ich erst einmal eine abstrakte Basisklasse und eine Factory Klasse, das sind schon mal zwei zusätzliche Klassen. Dazu kommen noch die Implementationen der Strategy Klassen selbst, was in meinem Fall jetzt weitere 4 Klassen waren. Dazu der Schnittstellenentwurf und Standardcode (Konstruktoren, etc.). Das ist schon eine Menge Overhead im Vergleich zu 4 Funktionen...
Also Hand auf´s Herz, wer ist wirklich Idealist/Purist und setzen Entwurfsmuster kompromisslos um und wer akzeptiert eine gewisses Maß an Quick´n´Dirty?
-
DocShoe schrieb:
Hallo zusammen,
nachdem ich den ganzen Tag mit der Implementation verschiedener Strategy Patterns und Factories verbracht habe stelle ich mir doch die Frage, ab wann sich der Aufwand lohnt bzw. wie ihr solche Dinge handhabt.
In einem konkreten Beispiel von mir habe ich eine Datenstruktur, die je nach Kontext unterschiedlich interpretiert werden muss (bitte fragt nicht wieso... *seufz*).
Konventionell ist das bisher so gehandhabt worden, dass ein switch-case Block für die Fallunterscheidung des Kontextes benutzt wurde und je nach Kontext eine von vier Funktionen, die die Interpretation der Daten übernimmt. Führt leider zu riesigen Quelltextdateien, da so eine Struktur gerne 25 und mehr Datenelemente hat, mit denen auch noch etwas rumgerechnet werden muss, bevor die Ausgabe stattfinden kann.
Mit dem Strategy/Factory Pattern brauche ich erst einmal eine abstrakte Basisklasse und eine Factory Klasse, das sind schon mal zwei zusätzliche Klassen. Dazu kommen noch die Implementationen der Strategy Klassen selbst, was in meinem Fall jetzt weitere 4 Klassen waren. Dazu der Schnittstellenentwurf und Standardcode (Konstruktoren, etc.). Das ist schon eine Menge Overhead im Vergleich zu 4 Funktionen...
Also Hand auf´s Herz, wer ist wirklich Idealist/Purist und setzen Entwurfsmuster kompromisslos um und wer akzeptiert eine gewisses Maß an Quick´n´Dirty?Weder noch, das ist mir beides viel zu kompliziert. Da frage ich vermutlich zuerst, wieso der Entwurf sowas braucht.
-
Ich denke das hängt auch immer vom Programm und der Aufgabenstellung ab. Ob es einfach schnell fertig sein soll und danach nie wieder verändert wird, oder ob es für spätere Änderungen flexibel sein soll.
Weiterhin kommt natürlich der Zeitdruck vom Chef dazu.Bei mir ists so: Wenn mir das Projekt wichtig ist, dann versuche ich immer möglichst gut zu designen, damit man sich nicht später selber ins Bein geschossen hat. Wenn es "einfach nur funktionieren" soll, dann sicherlich quick'n'dirty.
Besser ist wohl aber immer ersteres (wenn man passend designt).
-
volkard schrieb:
Weder noch, das ist mir beides viel zu kompliziert. Da frage ich vermutlich zuerst, wieso der Entwurf sowas braucht.
Das mit dem Entwurf ist so eine Sache... ein Großteil der Software kommt aus der Mitte der 90er und ist eine wilde Mischung aus C und C++. Ich soll da jetzt etwas Struktur reinbringen und eine vernünftige C++ Portierung machen, darf aber die alten Datenstrukturen nicht anfassen. Irgendwie muss ich jetzt aber damit klarkommen, dass ein A manchmal ein B ist, und ein weiteres mal ein C.
Man könnte natürlich noch eine Fassade benutzen, um ein A wie ein B oder C aussehen zu lassen.@volkard
Wenn du weder das eine noch das andere machst, wie löst du soetwas dann?
-
DocShoe schrieb:
Das mit dem Entwurf ist so eine Sache... ein Großteil der Software kommt aus der Mitte der 90er und ist eine wilde Mischung aus C und C++.
Tja, dann würde ich auch so weitermachen. Nur ein bißchen in die hübsche Richtung ziehen und das war's.
Ich kann mich gut an ein C++-Projekt voller toller Templates von mir erinnern, wo die C/C++-Kollegen dann Makro-ContainerMAKE_QUEUE(Packet); ... QUEUEOF_Packet queue;drangeknallt hatten.

Wetten, Deine hübschen Fassaden werden nicht verstanden und die fangen früher oder später doch switch-Orgien?