Ankündigung

Einklappen
Keine Ankündigung bisher.

Code wird zu komplex - Codedesign?

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Code wird zu komplex - Codedesign?

    Folgende Situation:

    Ich habe für einen Kunden ein Formular entwickelt, welches mit Hilfe von verschiedenen Angaben ein Produkt aus einem Katalog ermittelt und ein Angebot an den Endkunden verschickt.

    Das Ganze begann als relativ überschaubares HTML/JS-Formular im Frontend, basierend auf einem WordPress-Theme.

    Meine Herangehensweise ist recht einfach: ich teile den Code modular in Klassen, Dateien und Ordner auf, um die Übersicht und Wartbarkeit zu behalten. Hat bisher in meiner Freelancer-Karriere immer gereicht. Das Problem ist nun, dass sich der Kunde für dieses anfangs eher schlichte Formular immer neue Extras und Regeln ausdenkt, die ich dann in die Logik des Codes integrieren muss. Kurz gesprochen fliegt mir mein eigener Code mittlerweile um die Ohren.

    Es gibt diese Geschichte vom schwedischen König, der ein Kriegsschiff in Auftrag gab. Während dem Bau kamen ihm dann immer neue Ideen (mehr Kanonen usw.), die er umgesetzt haben wollte. Ende der Geschichte war, dass das völlig überladene Schiff beim Stapellauf im Hafen von Stockholm nach 200m umkippte und absoff.

    Die Frage ist nun, welche Art von Codedesign hier weiterhelfen könnte. Ist es MVC? Stichwort ist vermutlich Skalierbarkeit.


  • #2
    Hallo.

    ich teile den Code modular in Klassen, Dateien und Ordner auf, um die Übersicht und Wartbarkeit zu behalten.
    Hört sich doch so weit gut an.
    Kurz gesprochen fliegt mir mein eigener Code mittlerweile um die Ohren.
    In wie fern?
    Zu viele Ordner und Dateien?
    Zu große Dateien?

    Ich kann dein Problem nicht nachvollziehen. Kannst du es konkreter beschreiben?
    Relax, you're doing fine.
    RTFM | php.de Wissenssammlung | Datenbankindizes | Stay fit

    Kommentar


    • #3
      Zitat von VPh Beitrag anzeigen
      Ich kann dein Problem nicht nachvollziehen. Kannst du es konkreter beschreiben?
      Es ist ein Problem der Über-Komplexität der Anwendung.

      Beispiel: die Anwendung besteht in einem Formular aus 4 Schritten. Nach Schritt 4 wird das Angebot erstellt. Soweit, so gut. Nach einer Weile kam nun der Kunde darauf, unter gewissen Umständen Schritt 3 zu überspringen und nach Schritt 2 direkt Schritt 4 anzuzeigen.

      Die Templates werden intern mit einem switch() - Statement geladen. Durch die neu hinzugekommene Regel muss ich nun aber diesen switch - Block mit einem konditionalen Statement erweitern, um den Sonderfall abzufangen. Und so geht das immer weiter. Für den Sonderfall gibt es dann auch wieder Sonderregeln. Am Ende ist der Code durch die ganzen Regeln und Sonderfälle und fast widersprüchlichen Anforderungen ("dieses Eingabefeld ist obligatorisch, ausser...") quasi ein unwartbares Monstrum geworden.

      Ich sehe das Problem hier auch bei der Anwendungs-Konzeption, aber so ist das nun mal: der Kunde denkt sich etwas aus, das funktioniert gut, also denkt er sich noch mehr aus. Man kann das nicht immer im Voraus alles erahnen und braucht daher ein Modell, das da etwas resistenter ist als meine bisherige Herangehensweise.

      Hoffe, das ist verständlich.

      Kommentar


      • #4
        Meiner Ansicht nach brauchst du eine Workflow-Engine. Und je nach Kunde gibt es andere Workflows.

        Kommentar


        • #5
          Zitat von hellbringer Beitrag anzeigen
          Meiner Ansicht nach brauchst du eine Workflow-Engine. Und je nach Kunde gibt es andere Workflows.
          Okay, nach einer kurzen Recherche verstehe ich das so, dass eine Workflow-Engine etwas mit dem Management von Prozessen zu tun. Inwiefern ist das jetzt auf meinen Fall (Webentwicklung) anwendbar?

          Kommentar


          • #6
            Zitat von paddelboot Beitrag anzeigen
            Okay, nach einer kurzen Recherche verstehe ich das so, dass eine Workflow-Engine etwas mit dem Management von Prozessen zu tun. Inwiefern ist das jetzt auf meinen Fall (Webentwicklung) anwendbar?
            Ein Workflow hat mehrere Steps mit unterschiedlichen Formularen und Regeln. Ist das nicht das was du willst?

            Kommentar


            • #7
              Zitat von hellbringer Beitrag anzeigen

              Ein Workflow hat mehrere Steps mit unterschiedlichen Formularen und Regeln. Ist das nicht das was du willst?
              Bin mir nicht sicher, was du meinst. Reden wir von einem Werkzeug, mit dem der Kunde die ganzen Regeln und Sonderfälle usw. abbilden kann, so dass man die Übersicht behält? Das wäre zwar interessant und auch sicher hilfreich, aber wo ist der Zusammenhang mit dem Codedesign?

              Edit: wenn ich mir hier die Worflow Management Apps anschaue, steht oben z.B. Asana:

              https://www.capterra.com/workflow-management-software/

              Hab mich dort angemeldet, aber das ist ja lediglich ein Projektmanagement-Werkzeug wie Trello, welches wir bereits einsetzen. Und wie gesagt hilft das nicht wirklich weiter, was die Codestruktur selber anbelangt.

              Kommentar


              • #8
                In deinem Fall wird wohl ein Micro Framework reichen (Silex, Slim, Lumen, etc). MVC wird dann vorgeben, URL Router, Resouce Loader, Template Engine usw haben die an Bord. Ist ein einfachsten etwas etabliertes zu verwenden anstatt sich selbst etwas halbgares zu frickeln.

                Kommentar


                • #9
                  Zitat von paddelboot Beitrag anzeigen
                  Das wäre zwar interessant und auch sicher hilfreich, aber wo ist der Zusammenhang mit dem Codedesign?
                  Das "Codedesign" ist doch erstmal uninteressant. Viel wichtiger ist die Frage: wie willst du das Problem lösen? Welche Optionen hast du?

                  Zitat von millcolin Beitrag anzeigen
                  In deinem Fall wird wohl ein Micro Framework reichen (Silex, Slim, Lumen, etc). MVC wird dann vorgeben, URL Router, Resouce Loader usw haben die an Bord. Ist ein einfachsten etwas etabliertes zu verwenden anstatt sich selbst etwas halbgares zu frickeln.
                  Hat halt Null mit der Frage zu tun.

                  Kommentar


                  • #10
                    Zitat von lottikarotti Beitrag anzeigen
                    Hat halt Null mit der Frage zu tun.
                    Doch hat es, lies sein Frage nochmal durch, dann verstehst du evtl das er ein Architekur Problem hat und nicht genau weiss wo und wie er die einzelnen Aufgaben aufteilen soll.

                    Kommentar


                    • #11
                      Zitat von paddelboot Beitrag anzeigen
                      Bin mir nicht sicher, was du meinst. Reden wir von einem Werkzeug, mit dem der Kunde die ganzen Regeln und Sonderfälle usw. abbilden kann, so dass man die Übersicht behält?
                      Es gibt auch Workflow-Engines mit Frontend. Da kann ein User selber Workflows zusammenklicken. Aber das ist nur zusätzlich eine Schicht über der Engine. Als Entwickler kann man auch die pure Engine verwenden.

                      Zitat von paddelboot Beitrag anzeigen
                      Das wäre zwar interessant und auch sicher hilfreich, aber wo ist der Zusammenhang mit dem Codedesign?
                      Der Vorteil von Workflows ist, dass diese unabhängig vom Code funktionieren und dadurch sehr flexibel sind. Das ist besonders dann ein großer Vorteil, wenn man zig Kunden hat und jeder Kunde hat eine leicht andere Vorstellung davon wie die Software funktioniert, also einen anderen Workflow hat. Man hat dann nicht zig Versionen vom Code, der permanent zu warten ist, sondern man hat einen Code mit zig Workflows.

                      Kommentar


                      • #12
                        gelöscht.

                        Kommentar


                        • #13
                          Zitat von hellbringer Beitrag anzeigen

                          Als Entwickler kann man auch die pure Engine verwenden.
                          Verstehe ich nicht. An welche Workflow-Engines hattest du da gedacht? Müsste fast eine Online-App sein, damit alle daran arbeiten können.


                          Zitat von hellbringer Beitrag anzeigen
                          Der Vorteil von Workflows ist, dass diese unabhängig vom Code funktionieren und dadurch sehr flexibel sind. Das ist besonders dann ein großer Vorteil, wenn man zig Kunden hat und jeder Kunde hat eine leicht andere Vorstellung davon wie die Software funktioniert, also einen anderen Workflow hat. Man hat dann nicht zig Versionen vom Code, der permanent zu warten ist, sondern man hat einen Code mit zig Workflows.
                          Hört sich erstmal interessant an, auch wenn ich nur 1 Kunden mit 1 Codeversion habe.


                          Zitat von lottikarotti Beitrag anzeigen
                          Das "Codedesign" ist doch erstmal uninteressant. Viel wichtiger ist die Frage: wie willst du das Problem lösen? Welche Optionen hast du?.
                          Ich stelle mir vor, dass der Code dermaßen abstrakt/modular sein muss, dass auch die "Kreativität" eines Kunden kein Durcheinander mehr stiften kann, oder das zumindest in einem kontrollierbaren Rahmen geschieht. Dabei muss man immer davon ausgehen, dass man zu Beginn nicht weiß, welchen Verlauf die Entwicklung nehmen wird. Welche Optionen sich mir da bieten, das ist eben die Frage, die ich hiermit stelle.

                          Kommentar


                          • #14
                            Zitat von millcolin Beitrag anzeigen
                            Doch hat es, lies sein Frage nochmal durch, dann verstehst du evtl das er ein Architekur Problem hat und nicht genau weiss wo und wie er die einzelnen Aufgaben aufteilen soll.
                            Das Problem lässt sich doch völlig unabhängig von einem Framework lösen. Der Hinweis von hellbringer ist da schon zielführender.

                            Ich stelle mir vor, dass der Code dermaßen abstrakt/modular sein muss, dass auch die "Kreativität" eines Kunden kein Durcheinander mehr stiften kann, oder das zumindest in einem kontrollierbaren Rahmen geschieht. Dabei muss man immer davon ausgehen, dass man zu Beginn nicht weiß, welchen Verlauf die Entwicklung nehmen wird. Welche Optionen sich mir da bieten, das ist eben die Frage, die ich hiermit stelle.
                            Die Kunst dabei ist abzuschätzen *welche* Bausteine *wie* flexibel sein müssen. Es bringt letztlich nichts, wenn man die Abstraktion auf die Spitze treibt und am Ende nichts davon hat. Kunden sind unberechenbar. Im einfachsten Fall abstrahierst du erstmal das was wirklich notwendig ist. Aber dafür benötigst du erstmal eine Idee davon wie du das Problem handhaben willst.

                            Kommentar


                            • #15
                              Das größte Problem für mich ist, dass ich einen Kern-Code habe, der durch die ganzen Regeln und Spezialfälle aufgesplittert wird. Ich müsste stattdessen einen mehr oder weniger fest definierten (und abstrahierten) Kern-Code haben, den ich durch Regeln und Sonderfälle erweitern kann. Ein Template würde also nicht mehr durch include() geladen, sondern durch eine Funktion, die vor dem include noch prüfen müsste, ob irgendwelche Regeln registriert wurden. Nach diesem Schema müsste sich dann sämtliche Logik aufbauen lassen, also auch bei der Berechnung des Produkts usw.

                              >Die Kunst dabei ist abzuschätzen *welche* Bausteine *wie* flexibel sein müssen.

                              Genau das hat sich bei diesem Projekt als sehr schwierig erwiesen, d.h. Dinge, von denen man auszugehen können glaubte, wurden am Ende doch über den Haufen geworfen:

                              -> Katalog mit ganz sicher nicht mehr als 3 Produkten
                              -> Produkt-IDs wurden hardgecoded (da ja keine weiteren Produkte hinzukommen)
                              -> können Sie bitte noch 1 Produkt hinzufügen
                              -> bitte auch mit neuen Farben
                              -> Produkt-Berechnung musste abstrahiert werden.

                              Die Frage ist natürlich auch, ob man den Code komplett neu aufbauen muss oder den bestehenden irgendwie strukturieren kann.

                              Das Gute an der visuellen Prozessplanung wäre, dass der Kunde das selber einpflegen muss - und so auch sieht, was er da eigentlich anrichtet :=D

                              Kommentar

                              Lädt...
                              X