8 Stimmen

Reihenfolge der Klassenmitglieder im Quellcode

Dies war vorher gefragt (Frage Nr. 308581) aber diese spezielle Frage und die Antworten sind etwas C++-spezifisch und viele Dinge sind in Sprachen wie Java oder C# nicht wirklich relevant.

Die Sache ist die, dass selbst nach der Refaktorisierung, finde ich, dass es ein bisschen Chaos in meinem Quellcode-Dateien. Ich meine, die Funktionskörper sind in Ordnung, aber ich bin nicht ganz zufrieden damit, wie die Funktionen selbst angeordnet sind. Natürlich ist es in einer IDE wie Visual Studio relativ einfach, ein Element zu finden, wenn man sich erinnert, wie es aufgerufen wird, aber das ist nicht immer der Fall.

Ich habe einige Ansätze ausprobiert, wie z. B. öffentliche Methoden an die erste Stelle zu setzen, aber der Nachteil dieses Ansatzes ist, dass eine Funktion am Anfang der Datei am Ende eine andere private Funktion am Ende der Datei aufruft, so dass ich am Ende die ganze Zeit scrollen muss.

Ein anderer Ansatz besteht darin, verwandte Methoden zusammenzufassen (vielleicht in Regionen), aber das hat natürlich seine Grenzen, denn wenn es viele nicht verwandte Methoden in derselben Klasse gibt, ist es vielleicht an der Zeit, die Klasse in zwei oder mehr kleinere Klassen aufzuteilen.

Stellen Sie sich Folgendes vor: Ihr Code wurde ordnungsgemäß umstrukturiert, so dass er alle Anforderungen erfüllt, die in Code vollständig aber Sie möchten trotzdem Ihre Methoden neu ordnen für ergonomische Zwecke . Was ist Ihr Ansatz?

(Es handelt sich zwar nicht um ein technisches Problem, aber dieses Problem nervt mich gewaltig, so dass ich sehr dankbar wäre, wenn mir jemand eine gute Lösung vorschlagen könnte)

0 Stimmen

Diese Frage hat nichts mit der "Ergonomie von Geräten" zu tun, um die es bei diesem Tag geht.

4voto

Dirk Vollmar Punkte 166522

Eigentlich verlasse ich mich ganz auf die Navigationsfunktionen meiner IDE, d.h. Visual Studio. Meistens benutze ich F12, um zur Deklaration zu springen (oder Shift-F12, um alle Referenzen zu finden) und Strg+-, um zurück zu springen.

Der Grund dafür ist, dass ich die meiste Zeit an Code arbeite, den ich nicht selbst geschrieben habe, und ich möchte meine Zeit nicht damit verbringen, Methoden und Felder neu anzuordnen.

P.S.: Und ich verwende auch RockScroll , ein VS-Add-In, das das Navigieren und Scrollen in großen Dateien erleichtert

1 Stimmen

Oh ja, RockScroll ist eine große Hilfe, ich benutze es ständig. Leider neigt es dazu, Visual Studio ein paar Mal am Tag zum Absturz zu bringen.

0 Stimmen

Sind Sie sicher, dass RockScroll die Ursache für den Absturz ist? Das habe ich mit VS2008 noch nie erlebt...

0 Stimmen

Divo: Oh ja, definitiv. Die Abstürze begannen gleich nachdem ich RockScroll installiert hatte. Es passiert nur, wenn ich eine Lösung schließe, also ist es nicht so ärgerlich, aber es liegt definitiv an RockScroll.

3voto

annakata Punkte 72408

Wenn Sie wirklich Probleme mit dem Scrollen und Finden haben, leiden Sie möglicherweise unter dem God-Class-Syndrom.

Übrigens neige ich persönlich dazu, mit zu gehen:

class
{
  #statics (if any)

  #constructor

  #destructor (if any)

  #member variables

  #properties (if any)

  #public methods (overrides, etc, first then extensions)

  #private (aka helper) methods (if any)
}

Und ich habe weder eine Abneigung gegen Regionsblöcke noch gegen Kommentare, also nutzen Sie beides, um Beziehungen zu kennzeichnen.

0 Stimmen

Keine Gott-Klassen hier: wie ich schon erwähnt habe, ist alles ordentlich refaktorisiert und es gibt keine übergroßen Klassen, aber ich habe immer noch das Gefühl, dass ich mit der Art und Weise, wie Klassenmitglieder organisiert sind, nicht wirklich glücklich bin.

0 Stimmen

Methoden haben eine netzwerkartige Beziehung, keine streng hierarchische, daher halte ich jeden Versuch, "verwandte" Elemente zusammen zu platzieren, für ziemlich mangelhaft, vor allem, wenn "alle Instanzen finden" in VS so gut funktioniert. Ich finde es relevanter, die Dinge zu sehen, die einen gemeinsamen Anwendungsbereich haben.

1voto

Jeroen van Bergen Punkte 1036

Aus meiner (Java-)Sicht würde ich sagen: Konstruktoren, öffentliche Methoden, private Methoden, in dieser Reihenfolge. Ich versuche immer, Methoden, die eine bestimmte Schnittstelle implementieren, zusammenzufassen.

Meine Lieblingswaffe ist IntelliJ IDEA, das einige nette Möglichkeiten zum Falten von Methodenkörpern bietet, so dass es recht einfach ist, zwei Methoden direkt übereinander anzuzeigen, auch wenn ihre tatsächliche Position in der Quelldatei 700 Zeilen auseinander liegt.

Ich würde vorsichtig sein mit dem Herumspielen an der Position von Methoden im eigentlichen Quelltext. Ihre IDE sollte Ihnen die Möglichkeit geben, den Quellcode so anzuzeigen, wie Sie es wünschen. Dies ist besonders wichtig, wenn Sie an einem Projekt arbeiten, bei dem die Entwickler die IDE ihrer Wahl verwenden können.

0 Stimmen

Normalerweise versuche ich, Regionen oder Faltmethodenkörper zu vermeiden, weil ich es hasse, auf diese winzigen Kästchen zu klicken :)

0 Stimmen

Wie dem auch sei, bedenken Sie Folgendes: Sie setzen Ihre abstrakten Methoden an den Anfang, vielleicht sogar über den Konstruktor, da es Sinn macht, dass sie keine Funktionskörper haben, richtig? Wo platzieren Sie nun virtuelle Methoden (d.h. Methoden, von denen erwartet wird, dass sie außer Kraft gesetzt werden)? Neben die abstrakten Methoden? Oder irgendwo anders?

1voto

Treb Punkte 19459

Meine Bestellung, hier kommt sie.

  • Normalerweise setze ich die Statik an die erste Stelle.

  • Als nächstes kommen Mitgliedsvariablen und Eigenschaften, eine Eigenschaft, die auf ein bestimmtes Mitglied zugreift, wird mit diesem Mitglied gruppiert. Ich versuche, verwandte Informationen zu gruppieren, zum Beispiel alle Zeichenketten, die Pfadinformationen enthalten.

  • Der dritte ist der Konstruktor (oder die Konstruktoren, wenn Sie mehrere haben).

  • Befolgen Sie danach die Methoden. Diese werden nach dem geordnet, was für diese spezielle Klasse logisch erscheint. Ich gruppiere die Methoden oft nach ihrer Zugriffsebene: privat, geschützt, öffentlich. Vor kurzem hatte ich jedoch eine Klasse, die viele Methoden ihrer Basisklasse außer Kraft setzen musste. Da ich dort viel zu tun hatte, habe ich sie in einer Gruppe zusammengefasst, unabhängig von ihrer Zugriffsebene.

Meine Empfehlung: Ordnen Sie Ihre Kurse so, dass sie Ihren Arbeitsablauf unterstützen. Ordnen Sie sie nicht einfach an, nur um Ordnung zu haben. Die Zeit, die Sie für die Bestellung aufwenden, sollte eine Investition sein, die Ihnen hilft, mehr Zeit zu sparen, die Sie sonst für das Blättern benötigen würden.

In C# verwende ich #region um diese Gruppen voneinander zu trennen, aber das ist Geschmackssache. Es gibt viele Leute, die keine Regionen mögen. Ich schon.

1voto

Michael Buen Punkte 37103

Ich lege die zuletzt erstellte Methode oben auf die Klasse. Wenn ich dann das Projekt öffne, bin ich wieder bei der letzten Methode, die ich gerade entwickle. Das macht es mir leichter, wieder "in die Spur" zu kommen.

Es spiegelt auch die Tatsache wider, dass die Methode (die andere Methoden verwendet), die ich gerade erstellt habe, die oberste Schicht anderer Methoden ist.

Gruppieren Sie verwandte Funktionen zusammen, und tun Sie sich nicht schwer damit, alle privaten Funktionen an den unteren Rand zu stellen. Übernehmen Sie auch das Designprinzip der C#-Eigenschaften, verwandte Funktionen sollten in unmittelbarer Nähe zueinander liegen, das C#-Sprachkonstrukt für Eigenschaften verstärkt diese Idee.


P.S.
Wenn C# nur Funktionen verschachteln könnte wie Pascal oder Delphi. Vielleicht kann Anders Hejlsberg es in C# einbauen, er hat auch Turbo Pascal und Delphi erfunden :-) D Sprache hat verschachtelte Funktionen.

0 Stimmen

Ja, solange man es von unten nach oben macht, ohne zwischendurch von oben nach unten einzutauchen ;-)

0 Stimmen

Ich vermisse auch verschachtelte Funktionen in C#... Es gibt wahrscheinlich einen Grund, warum C# keine verschachtelten Funktionen hat, aber ich wünschte, sie würden unterstützt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X