Ein Vorschlag aus Bob Martins "Clean Code" lässt mich am Kopf kratzen. "Wenn eine Funktion einmal eine andere aufruft, sollten sie vertikal nahe beieinander liegen und der Anrufer sollte sich über dem Angerufenen befinden."
Bisher habe ich mich mehr oder weniger an die .Net-Richtlinien gehalten, die Klassenmitglieder nach Typ (Eigenschaften, Ctoren, Funktionen) und Sichtbarkeit (öffentlich / prot. / Privat) gruppieren. Der Tipp scheint zunächst ein Problem zu sein. Aber es könnte "einfach funktionieren". Ich persönlich bin auf Fälle gestoßen, in denen mir dieses Layout gefallen hat - einfacher zu analysieren, wenn Sie sich in der richtigen Anrufkette befinden.
Die Idee hinter dem Tipp scheint vernünftig, aber andere Szenarien wie "Lassen Sie mich die öffentliche Oberfläche dieser Klasse betrachten" könnten sich verschlechtern. Vielleicht setzt Onkel Bob auf die kleinen Klassen und die IDE-Unterstützung für die Anzeige von Typen ...
Hat jemand dies über einen längeren Zeitraum ausprobiert?
Update: Scheint, als wäre ein Code-Snippet in Ordnung
class SomeType()
{
/// fields, ctors, et. all
public void Method1() { // calls HelperMethod1 and HelperMethod2 }
private void HelperMethod1 { // calls HelperMethod3 }
private void HelperMethod3 {}
private void HelperMethod2 {}
public void Method2 () { // and so on... }
}
quelle
Antworten:
Ich mag hier auf die Nerven gehen, aber ich frage mich, ob das von Ihnen verwendete Werkzeug einen Einfluss darauf hat. Ich beziehe mich auf die Entscheidung zwischen Texteditor und IDE, die Entwickler treffen müssen.
In einer IDE haben Sie viel mehr Funktionen zum Anzeigen von Quelldateien. In der Regel können Sie eine Liste der Methoden alphabetisch nach Sichtbarkeit sortieren oder sogar den Typ in einer Seitenleiste zurückgeben. Sie können auch zu einer Methode springen, wenn Sie eine Verwendung dafür haben. Sie können auch Aufrufbäume für Methoden und Drilldowns generieren. In der Regel verfügen Sie auch über einen leistungsstarken Befehl find, der reguläre Ausdrücke unterstützt. In dieser Situation spielt die Reihenfolge der von Ihnen erstellten Methoden keine Rolle, da Sie andere Ansichten als den verfügbaren Quellcode haben.
In einem Texteditor verfügen Sie normalerweise nicht über diese Funktionen. Die nächstgelegene Funktion ist wahrscheinlich ein starkes Suchen / Ersetzen. Hier sollten Sie der Struktur Ihrer Datei mehr Aufmerksamkeit schenken, da die Navigation möglicherweise schwieriger ist. Sie möchten den Zeitaufwand für das Scrollen in der Datei minimieren, um das Gesuchte zu finden, und eine konsistente und logische Reihenfolge der Methoden kann hilfreich sein.
quelle
Der Punkt ist, dass angerufene Dinge weniger interessant sind als angerufene Dinge. Je mehr eine Methode andere Methoden aufruft, desto wahrscheinlicher ist es, dass diese Methode Teil der externen API des Objekts ist (im Gegensatz zu einem Implementierungsdetail). Das bedeutet, dass die externe API der Klasse - öffentliche Methoden, wenn Ihre Sprache dieses Konzept unterstützt - natürlich ganz oben in der Datei stehen möchte, um das Auffinden dieser Methoden zu erleichtern. Umgekehrt "wollen" Hilfsfunktionen und dergleichen am Ende der Datei stehen.
(Ich erkläre das Konzept und bewerte seine Wirksamkeit nicht.)
quelle
Wenn Sie mit längerem Zeitraum mehr als ein paar Tage meinen? Dann Nein.
Vor ein paar Jahren fing ich an, dies mit einem neuen Code zu tun, und machte mich langsam wahnsinnig, bis ich aufhörte.
Meine persönliche Präferenz für das Auslegen von Klassen ist
Aber das ist nicht religiös, Eigenschaften und Methoden können miteinander vermischt werden. Sichtbarkeit kommt nicht ins Spiel (ich gruppiere nicht nach öffentlich / geschützt / privat)
Wir haben einen Mann hier im Büro, der eine strenge Struktur für alles in einer Klassendatei beibehält, wobei alles in Hauptgruppen und Untergruppen zusammengefasst ist, die alle gut in Regionen verschachtelt sind. . . Ich muss zugeben, dass ich denke, dass Regionen das Werk Satans sind, sie treiben mich um die verdammte Wendung.
Jedes Mal, wenn ich eine seiner Klassen eröffne, sterbe ich innerlich ein wenig :(
quelle