Ich frage mich, wer in engen Fristen Zeit hat, Entwurfsmuster umzusetzen? Es ist viel mehr Arbeit und Programmieraufwand, um es beim ersten Mal und innerhalb des Zeitrahmens richtig zu machen. Ich weiß, dass es langfristige Vorteile hat, aber konnten Sie jedes Entwurfsmuster korrekt implementieren, wenn der Kunde auf Ihrem Kopf sitzt und der Druck wächst.
Ich denke, sobald Ihre erste Version veröffentlicht ist und Sie genügend Zeit für die nächste Version haben, können Sie daran denken, die Codequalität und Verwaltbarkeit mit Designmustern zu verbessern.
Antworten:
Das ist falsch
Ohne den Vorteil, dass jemand das Entwurfsmuster bereits durchdacht, erklärt und dokumentiert hätte, wäre es doppelt so schwierig.
Ein Entwurfsmuster vereinfacht das Denken, Fragen und Entscheiden.
Sie müssen nichts Neues erfinden. Sie können etwas verwenden, das von Ihnen und anderen bereits gut verstanden wurde.
quelle
Mit Designmustern können Sie weniger denken. Das ist wirklich der ganze Punkt. In der Frage ist eine falsche Dichotemie enthalten. Es wird empfohlen, entweder Entwurfsmuster zu verwenden oder überhaupt keine Muster zu verwenden. Die wirkliche Wahl ist die Verwendung eines etablierten Musters oder eines hausgemachten Musters. Manchmal ist Ihr Design besser als der empfohlene Ansatz, aber ... normalerweise nicht. Warum die ganze Arbeit der Lösung eines Problems durchlaufen, das bereits gut gelöst wurde? Ihre eigene halbgebackene Version wird kaum jemals so gut sein, und Sie müssen all diese Gedanken verschwenden, um sie sich auszudenken.
quelle
Nach meiner Erfahrung ist schnell und schmutzig ein Oxymoron. Jede Zeit, die Sie durch Einsparung von Design sparen könnten, wird fast immer durch zusätzliches Debugging verbraucht.
quelle
Legen Sie keine Frist fest, die Ihnen nicht genügend Zeit lässt, um die Dinge richtig zu machen. Sie müssen die technischen Schulden irgendwann zurückzahlen, und je mehr Code vorhanden ist, bevor Sie anfangen, die Dinge in ein vernünftiges Design umzuwandeln, desto schwieriger wird es. Das bedeutet noch mehr Arbeit und Programmieraufwand.
quelle
Die Liste der Designmuster ist sehr lang (Leute geben gerne Namen). Selbst wenn Sie nicht an "Ok, hier verwende ich _ hier" denken , ist das, was Sie wahrscheinlich tun, ein Muster, das jemand benannt hat. Je mehr Sie programmieren, desto mehr haben Sie eine Vorstellung davon, wie etwas zu tun ist, und desto weniger müssen Sie sich Gedanken darüber machen, welche Muster Sie verwenden.
quelle
Ich teile eine ähnliche Situation. Für die Wartung von Anwendungen ist möglicherweise ein umfangreiches Refactoring erforderlich, damit sich das Entwurfsmuster lohnt. Wenn es um die Ecke zu großen Ausfallzeiten kommt, sollten Sie diese erst verschieben, wenn Sie Zeit haben, das Problem zu beheben.
Vor allem, wenn der Kunde gestern ein Produkt verlangt. Das Softwarequalitätsdreieck existiert unabhängig davon, ob Sie es bestätigen oder sich dessen bewusst sind. "Das erste Mal richtig machen" erfordert häufig eine umfangreiche Vorausplanung, einschließlich guter Anforderungen und geringem Umfang. Dies bedeutet, dass der Kunde bereit sein muss, aktiv am gemeinsamen Erfolg des Projekts teilzunehmen.
Denken Sie auch daran, dass für OO 101 ein Abschnitt erstellt werden muss, bis die Anforderungen erfüllt sind. DANN Refactor, sonst drehen Sie nur Ihre Räder.
quelle
Es ist nicht mehr Arbeit und Aufwand, es beim ersten Mal richtig zu machen.
Wenn es nicht kaputt ist, wird es wahrscheinlich nicht repariert. Und nicht richtig heißt nicht unbedingt kaputt. Es wird immer etwas anderes geben, das getan werden muss. Sie werden also viel mehr Zeit damit verbringen, es zu unterstützen und weniger Zeit damit zu verbringen, es zu korrigieren oder etwas Neues zu erstellen.
Nicht nur, dass es nicht länger dauert, es richtig zu machen, als es falsch zu machen. Es kann kurzfristig so aussehen, als würden Sie keine willkürlichen Fristen oder Meilensteine einhalten. Aber am Ende kommt alles in ungefähr der gleichen Zeit zusammen. Aber die Qualität des ersten QA-Releases wird das erste Qa-Release des Sitzes des Hosenbaus bei weitem übertreffen. Dies reduziert die Nacharbeit vor der Freigabe. Am Ende ist es nicht nur ein Unentschieden, es gewinnt jedes Mal.
quelle
Wenn die Implementierung eines Entwurfsmusters länger dauert, passt das Muster, das Sie verwenden möchten, wahrscheinlich nicht zu dem Problem, das Sie lösen möchten. Bei Ihrer nächsten Codeüberprüfung für die Implementierung eines neuen Musters erhalten Sie keine "Bonuspunkte". Es geht darum, bewährte Methoden zur Lösung häufiger Probleme leichter identifizieren zu können. Entwurfsmuster sind eine Möglichkeit für Menschen, einen Ansatz für diese Probleme zu teilen und in der Lage zu sein, gemeinsam darüber zu sprechen.
quelle
Es ist sehr wahrscheinlich, dass Sie bereits Entwurfsmuster verwenden. Diese sind nur eine formale Klassifizierung für häufig wiederkehrende Architekturkonzepte.
Um eine Konstruktionsanalogie zu verwenden - wo Sie einen bestimmten Teil Ihres Gebäudes als "den Teil, der den Regen und die Hitze fernhält" bezeichnen könnten, würde jemand, der sich mit dem Bauen auskennt, diesen Teil einfach "das Dach" nennen. Es gibt keinen Nachteil, den ich bei der Implementierung eines "Daches" auf einem Haus sehen kann, im Gegensatz zur Implementierung eines "Teils, das den Regen draußen und die Hitze drin hält".
Der Hauptaufwand besteht darin, herauszufinden, welche Entwurfsmuster wo passen, da sie aus dem Kontext heraus oft recht abstrakt sind. Sie verwenden mit ziemlicher Sicherheit Facade / Factory, es sei denn, Sie schreiben ein Verfahren. Ich fand Observer, Strategy and Factory am einfachsten, um meinen Kopf in Schwung zu bringen.
quelle
Wie andere angemerkt haben, ist es natürlich am billigsten, es gleich beim ersten Mal richtig zu machen. Ich möchte aber auch darauf hinweisen, dass jedes Programmierkonstrukt irgendwo in das Spektrum des Pattern-Anti-Patterns fällt. Sie implementieren entweder etwas ordnungsgemäß oder nicht. 'goto' infizierter Code folgt einem Muster, es ist nur etwas, das früh als potenziell schädlich erkannt wurde. Beachten Sie jedoch, dass der gesamte Code zu einem bestimmten Zeitpunkt im Kompilierungszyklus auf Sprünge und Verzweigungen hinausläuft. Es ist an sich nichts Falsches am Springen: Es macht größere Projekte schwieriger zu verstehen.
Es ist leicht, sich von Mustern irreführen zu lassen, die für einfache Anwendungsfälle trivial erscheinen. Sobald Sie mehr Flexibilität benötigen, degenerieren die meisten spröden Muster zu Anti-Mustern. Meine Regel lautet daher, nur Code zu schreiben, den ich verstehen kann und der eine vernünftige Chance zum Debuggen hat. Wenn ich mich entscheide, ein cleveres Muster blind anzuwenden, muss ich mindestens so clever sein wie der Mustercode, um es zu debuggen. Der Schlüssel besteht also nur darin, sicherzustellen, dass Sie Muster isolieren und verwenden, die direkt auf Ihr Problem zutreffen, dass Sie sich dem Problem auf der richtigen Abstraktionsebene nähern und dass Sie jede Zeile in Ihrem Code verstehen und debuggen können.
Ein Schlüssel dabei ist das richtige Gleichgewicht zwischen kurz- und langfristigen Anforderungen. Denken Sie daran, dass das schnelle Schreiben von gutem Code etwas ist, das ausgehend von gut verstandenen Mustern sicherlich hilfreich sein kann - Spaghetti-Code scheint vor allem auf den ersten Blick schneller zu sein. Sie werden jedoch schnell die Einschränkungen von Anti-Mustern in jedem größeren Projekt erkennen, in dem Zerlegbarkeit, Modularität usw. unglaublich wichtig werden.
quelle
Ich gehe gegen den Strich und sage, dass sie helfen können, aber meistens weh tun, wenn sie unter den von Ihnen beschriebenen Umständen auftreten.
Sie helfen, wenn Sie mit ihnen sehr vertraut sind UND (Sie haben eine gute Testabdeckung aller Teile, die effektiv sind, ODER dies ist eine Green-Field-Codierung).
Aber wirklich, wenn Sie diese Frage stellen, dann entweder A. Verwenden Sie die Muster nicht als natürliche Methode, um Dinge zu tun (denn wenn Sie dies getan hätten, würden Sie nicht daran denken, zu fragen, würden Sie es einfach tun, ohne nachzudenken) ODER B. Der Code ist mit der Implementierung des Musters in der zugewiesenen Menge so inkompatibel, dass es einfach unrealistisch ist, das Muster zu verwenden.
quelle
The code is so incompatible to the implementation of the pattern
Wenn dies der Fall ist, ist entweder das Muster schlecht gewählt oder der Code löst das Problem nicht. Sie wählen ein Muster aus, das das Problem löst, mit dem Sie konfrontiert sind, und versuchen nicht, so viele Muster wie möglich in ein Projekt zu integrieren, um mit Rechten zu prahlen!Nein. Es scheint einige Zeit zu dauern, Best Practices (Design Patterns, MVC, whetever) auf ein Problem anzuwenden, und es ist nicht so, dass ich oder andere Entwickler Design Patterns nicht gut kennen.
Einige dieser bewährten Methoden können auch dann angewendet werden, wenn Sie in Eile sind, aber ein gutes System benötigt Zeit zum Entwerfen.
quelle