Programme schreiben, die eine Sache machen und es gut machen

9

Ich kann den Teil "mach ein Ding" über Kapselung, Dependency Injection , Principle of Least Knowledge , und Du wirst nicht kommen Brauchen Sie es ; aber wie verstehe ich den zweiten Teil "tue es gut?"

Ein Beispiel ist der Begriff Vollständigkeit , der im selben YAGNI-Artikel :

  

beispielsweise könnte unter den Funktionen, die das Hinzufügen von Elementen, das Löschen von Elementen oder das Ändern von Elementen ermöglichen, die Vollständigkeit auch zum "Umbenennen von Elementen" empfohlen werden.

Ich fand jedoch, dass eine solche Argumentation leicht zu einem Feature-Creep missbraucht werden könnte, wodurch der "Do One Thing" -Teil verletzt würde.

Also, was ist ein Lackmustest, um eher ein Feature zu sehen, gehört zur Kategorie "do it well" (also in die Funktion / class / program) oder in die andere Kategorie "do one thing" (also ausschließen)?

Der erste Teil, "do one thing", wird am besten mit dem Befehl ls von UNIX als Gegenbeispiel für die Aufnahme einer übermäßigen Anzahl von Flags zur Formatierung seiner Ausgabe verstanden, die vollständig an ein anderes externes Programm delegiert sein sollte. Aber ich habe kein gutes Beispiel, um den zweiten Teil "mach es gut" zu sehen.

Was ist ein gutes Beispiel, wenn das Entfernen eines weiteren Features es nicht "gut machen" würde?

    
kirakun 29.03.2011, 21:53
quelle

5 Antworten

1

Ich sehe "Do It Well" so viel von der Qualität der Implementierung einer Funktion als von der Vollständigkeit einer Menge von Funktionen (in Ihrem Beispiel das Umbenennen sowie das Erstellen und Löschen).

Do It Well manifestiert sich in vielerlei Hinsicht, einige Arten des Denkens:

Verhalten als Reaktion auf "spezielle" Eingaben . Beispiel, um den Mittelwert einiger Integer zu berechnen:

%Vor%

Was macht das, wenn das Array null Elemente hat? Wenn die Artikel insgesamt mehr als MAX_INT?

Leistungsmerkmale . Wurde bei steigendem Datenvolumen ausreichend auf das Verhalten geachtet?

Abhängigkeitsfehler Wenn unsere Implementierung von anderen Modulen oder Infrastruktur abhängt, was passiert, wenn diese fehlschlagen. Beispiel: Dateisystem voll, Datenbank inaktiv?

Was das Feature selbst betrifft, denke ich, dass Sie hier eine Spannung erkennen können. Eine Sache, die Sie in Betracht ziehen könnten: Sie müssen nicht jedes Feature implementieren, vorausgesetzt, dass es ziemlich offensichtlich ist, dass ein Feature einfach ohne ein vollständiges Neuschreiben hinzugefügt werden kann.

    
djna 04.04.2011, 13:13
quelle
1

Der ganze Zweck dieses Ratschlags besteht darin, Sie dazu zu bringen, Qualität gegenüber Quantität zu bevorzugen.

Das Konzept von one thing ist subjektiv und hängt von Granularität ab. Würden Sie sagen, dass eine Tabellenkalkulationsanwendung mehr als eine Sache macht, wenn sie auch drucken kann, oder ist das ein Teil dieser einzigen Sache?

Der Punkt ist, dass Sie sicherstellen sollten, dass jede Funktion und die Anwendung selbst erledigt ist und Kunden erfreut , bevor Sie versuchen, neue Funktionen hinzuzufügen.

    
Mark Seemann 30.03.2011 06:53
quelle
1

Ich denke, deine Frage weist auf die fundamental organische Natur des Feature Creep hin, und wenn du diese Natur verstehst, wirst du ermächtigt sein, über die größere Frage nachzudenken.

Denken Sie daran wie ein Garten: Wenn Sie eine Sache pflanzen und gut pflanzen, sagen wir, eine Chrysantheme, dann sind Sie nicht damit fertig, einfach den Samen zu pflanzen. In der Tat müssen Sie sicherstellen, dass der Boden gut gepflegt ist, dass das Gebiet ausreichend geschützt ist, dass die Jahreszeit stimmt, etc.

Wenn Ihre Chrysantheme (Ihre eine Sache ) wächst, werden auch andere konkurrierende Pflanzen wachsen - einige, die aussortiert werden müssen und andere, die die ursprüngliche Eins tatsächlich ergänzen >. In der Tat können diese anderen Organismen in einigen Fällen überlebenswichtig für Ihr one thing sein.

Wie bei diesen Funktionen, die YAGN sind, ist ein wenig Wachsamkeit erforderlich, um zu bestimmen, welche Unkräuter Merkmalskriechvorgänge darstellen und welche wichtige und ergänzende Funktionen darstellen.

Egal, es gut gemacht bedeutet einfach, dass Ihre Chrysantheme herzhaft, gesund und pünktlich ist. : -)

    
jMyles 02.04.2011 19:25
quelle
0

Ich würde sagen, dass ein E-Mail-Programm ohne die Möglichkeit, Anhänge hinzuzufügen, ein gutes Beispiel wäre.

    
Billy Moon 29.03.2011 22:00
quelle
0

Das mag wie ein merkwürdiges Beispiel klingen, aber ich würde sagen, Dropbox ist ein gutes, wenn auch komplexes Beispiel.

Es ist ihr gelungen, eine Reihe ähnlicher konkurrierender Apps zu schlagen, indem sie sich der Vereinfachung und einem Mangel an Features verschrieben hat, was, wie Sie erwähnten, gegen das Prinzip "mach eins" verstoßen würde. Mit dem ap können Sie Dokumente in einem Ordner speichern, auf den Sie überall zugreifen können. Sie haben auf das Kernproblem heruntergebohrt und es so gelöst, dass es in 90% aller Fälle perfekt funktioniert.

Es ist schwer, eine harte und schnelle Regel zu setzen, aber ich würde sagen, dass es die beste Möglichkeit ist, sich an diese Regel zu halten, wenn man etwa 90% der Anwendungsfälle berücksichtigt und die Randbedingungen ignoriert.

>

Ich denke, 90 +% von ls verwenden ist ohne Argumente oder vielleicht zwei oder drei der beliebtesten. Das Prinzip "Mach's gut" sollte sich darauf konzentrieren, was die Mehrheit der Nutzer braucht, anstatt Power-User oder Randfälle zu bedienen, wie es bei den vielen Möglichkeiten der Fall ist.

Dies ist, was Dropbox erfolgreich macht und warum es als Beispiel für gutes Anwendungsdesign ziemlich gut akzeptiert wird.

    
teenan 29.03.2011 22:06
quelle