Konnten Sie Entwurfsmuster in engen Fristen umsetzen?

8

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.

RPK
quelle
3
"Sobald [...] du genug Zeit für die nächste Veröffentlichung hast ..." - heißt das nicht "sobald die Hölle zufriert ..."?
Nikie
1
Klingt nach Rot, Grün, Refactor.
Job

Antworten:

31

Es ist viel mehr Arbeit und Programmieraufwand, um es beim ersten Mal und innerhalb des Zeitrahmens richtig zu machen.

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.

S.Lott
quelle
Wahrscheinlich bevorzugen Sie ein vorgefertigtes Framework wie MVVM Lite Toolkit oder OpenRasta?
RPK
2
@RPK: Nein. Entwurfsmuster erleichtern die Programmierung, indem sie eine Möglichkeit bieten, ein Problem zu verstehen und das Problem zu lösen. Frameworks basieren zufällig auf Entwurfsmustern, spielen aber keine Rolle. Ich verwende ständig Designmuster innerhalb und außerhalb von Frameworks.
S.Lott
Ich denke, in diesem Kommentar ging es mehr darum, etwas schnelles und schmutziges zu tun, als es auf die beste Weise zu tun.
Unholysampler
2
@RPK: "Wenn wir sie nicht verwendeten, konnten wir keine besseren Anwendungen schreiben?" Nein. Heutzutage gibt es viele Programmierer, die nicht viele Entwurfsmuster kennen und schlechte Software langsam implementieren. Wenn sie Entwurfsmuster lernen, schreiben sie schneller bessere Software.
S.Lott
2
@Chad: "Sie können immer noch schlechte Software mit Entwurfsmustern schreiben". Da dies für jede Technologie allgemein gilt, handelt es sich um eine Tautologie. Es scheint nicht hilfreich zu sein, es zu wiederholen, da es immer wahr ist.
S.Lott
13

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.

Morgan Herlocker
quelle
3
+1: "Mit Designmustern können Sie weniger denken."
S.Lott
Einverstanden. Der hausgemachte Stil mit einfachen Wiederverwendungsmöglichkeiten hat für mich jahrelang gut funktioniert. Bis heute fand ich kein Problem bei der Skalierung und Wartung der Anwendung. Ich möchte definitiv einem etablierten Muster folgen, aber auch hier muss ich als Muster reif genug sein. Wenn Sie ein etabliertes Muster genau kennen, ist der Weg einfach, sonst können Sie nicht erwarten, dass er abhängig von Büchern und Foren pünktlich geliefert wird.
RPK
Durch geeignete Designmuster kann ich weniger denken. Seltsamerweise musste ich nie das Internet besuchen, um den Namen eines Designmusters nachzuschlagen, das für meine Verwendung geeignet wäre. Ich habe mir gerade eine Möglichkeit ausgedacht, Code umzugestalten, ohne die Namen der Muster zu kennen, die ich gerade aufgerufen habe. Dies ist bei Datenstrukturen und Algorithmen nicht der Fall. Diese neu zu erfinden wäre sehr schwierig, und daher ist es sinnvoll, von anderen zu lernen. Designmuster sind meistens gesunder Menschenverstand. Viele sollten es sein und einige sind Teil einer Bibliothek oder einer Sprache. Einige Entwurfsmuster entstehen aufgrund einer Einschränkung einer typischen OO-Sprache.
Job
8

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.

Karl Bielefeldt
quelle
2
+1: Schnell und schmutzig ist ein Oxymoron , könnte es nicht kürzer ausdrücken! Ich habe zu viele Leute gesehen, die jetzt mit der Implementierung begonnen haben . Wir sind Entwickler und schreiben daher Code, aber das bedeutet nicht , dass wir nur auf einer Tastatur tippen. Zuerst zu denken ist keine Zeitverschwendung ...
Matthieu M.
+1: "Schnell und schmutzig: gerade jetzt" wird zu "Langsam und schmutzig: langfristig", "Langsam und sauber: gerade jetzt" wird zu "Schnell und sauber: langfristig" ;-)
umlcat
@Karl: Ich möchte nicht wenige Unternehmen nennen, da die Namen in Fortune 50 stehen. Kürzlich sagte mir ein Mitarbeiter, dass Unternehmen für schlecht implementierte Muster einen hohen Preis zahlen. Es ist einfach die App zu behalten. Laufen ohne an zukünftige Skalierungsvorteile zu denken. Das Projekt muss vor Ablauf der Frist geliefert werden und es bleibt keine Zeit für eine Qualitätsverbesserung.
RPK
Niemand behauptet, dass die bloße Verwendung von Designmustern die Qualität sichert, aber das richtige Design im Voraus trägt nicht nur zur langfristigen Qualität bei, sondern erleichtert auch die schnellere Veröffentlichung der ersten Version. Wenn ausgefallene Designmuster dem im Weg stehen, machen Sie es falsch.
Karl Bielefeldt
4

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.

Adam Jaskiewicz
quelle
Lol. Das war gut
RPK
2

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.

unholysampler
quelle
1
Ja. Sogar das Transaktionsskript ist ein Entwurfsmuster. Die Benennung von Mustern erleichtert nur die Konversation.
pdr
2

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.

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.

P.Brian.Mackey
quelle
2

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.

SoylentGray
quelle
2

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.

Joel C.
quelle
Der einzige Bonuspunkt ist, dass ich es beim zweiten Mal immer richtig mache. Dies liegt daran, dass sowohl der Kunde als auch ich nach einigen Monaten der Bereitstellung erkennen, was wir wollen. Viele werden mit dieser Dummheit wütend werden, aber es ist so.
RPK
2

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.

Sunwukung
quelle
Ich mag diese Interpretation. "Design Patterns" sind zu einem HR-Schlagwort geworden, das oft nur "ein Problem bedeutet, das jemand bereits gelöst hat". Das Ermitteln, ob Ihre Lösung von der Anwendung eines Entwurfsmusters profitiert, ist einfach deshalb wertvoll, weil Sie gezwungen sind, abstrakt über Ihr Problem nachzudenken. Wenn Sie dies nicht tun, ist es sehr wahrscheinlich, dass Sie das Problem, das Sie lösen sollen, nicht wirklich verstehen.
Stefan Mohr
1

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.

Joseph Weissman
quelle
1

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.

ElGringoGrande
quelle
The code is so incompatible to the implementation of the patternWenn 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!
Joel C
Die Antwort lautet C: Ich bin immer noch nicht zuversichtlich und solide genug, um sie in ein Produktionsprojekt umzusetzen. Wie ich oben bereits geschrieben habe, funktioniert ein hausgemachtes Rezept einwandfrei und es gab nie Probleme mit der Skalierung und Wiederverwendbarkeit. Ich möchte definitiv den Industriestandards folgen, aber nicht ohne gründliches Verständnis des Themas.
RPK
1

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.

umlcat
quelle