Dies wurde zuvor gestellt (Frage Nr. 308581) , aber diese spezielle Frage und die Antworten sind ein bisschen C ++ - spezifisch und viele Dinge sind in Sprachen wie Java oder C # nicht wirklich relevant.
Die Sache ist, dass ich selbst nach der Refactorisierung feststellen muss, dass in meinen Quellcodedateien ein wenig Unordnung steckt. Ich meine, die Funktionskörper sind in Ordnung, aber ich bin nicht ganz glücklich damit, wie die Funktionen selbst angeordnet sind. Natürlich ist es in einer IDE wie Visual Studio relativ einfach, ein Mitglied zu finden, wenn Sie sich daran erinnern, wie es heißt, aber das ist nicht immer der Fall.
Ich habe ein paar Ansätze ausprobiert, wie zum Beispiel öffentliche Methoden, aber der Nachteil dieses Ansatzes besteht darin, dass eine Funktion am Anfang der Datei eine andere private Funktion am Ende der Datei aufruft, so dass ich am Ende bin Scrollen die ganze Zeit.
Ein anderer Ansatz ist es, verwandte Methoden zu gruppieren (vielleicht in Regionen), aber offensichtlich hat dies seine Grenzen, als ob es viele nicht verwandte Methoden in derselben Klasse gibt. Vielleicht ist es Zeit, die Klasse auf zwei oder mehr aufzuteilen kleinere Klassen.
Beachten Sie also Folgendes: Ihr Code wurde ordnungsgemäß umstrukturiert, sodass er alle in Code abgeschlossen genannten Anforderungen erfüllt, Sie möchten jedoch Ihre Methoden für ergonomische Zwecke . Was ist Ihr Ansatz?
(Eigentlich ist das zwar nicht gerade ein technisches Problem, aber dieses Problem stört mich wirklich sehr, also wäre ich wirklich dankbar, wenn jemand einen guten Ansatz finden könnte)
Tatsächlich bin ich völlig auf die Navigationsfunktionalität meiner IDE angewiesen, d. h. Visual Studio. Die meiste Zeit verwende ich F12, um zur Deklaration zu springen (oder Shift-F12, um alle Referenzen zu finden) und die Strg + -, um zurück zu springen.
Der Grund dafür ist, dass ich die meiste Zeit an Code arbeite, den ich selbst nicht geschrieben habe und ich möchte meine Zeit nicht damit verbringen, Methoden und Felder neu zu ordnen.
PS: Und ich benutze auch RockScroll , ein VS-Add-In, das das Navigieren und Scrollen großer Dateien erleichtert einfach
Wenn Sie wirklich Probleme beim Scrollen und Finden haben, ist es möglich, dass Sie unter dem Klassensyndrom leiden.
Fwiw, ich persönlich gehe gerne mit:
%Vor%Und ich habe keine Abneigung gegen Regionsblöcke, auch keine Kommentare, also nutze beide, um Beziehungen zu bezeichnen.
Von meinem (Java) Standpunkt aus würde ich Konstruktoren, öffentliche Methoden, private Methoden in dieser Reihenfolge sagen. Ich versuche immer Methoden zu gruppieren, die eine bestimmte Schnittstelle implementieren.
Meine Lieblingswaffe der Wahl ist IntelliJ IDEA, die einige schöne Möglichkeiten hat, Methodenkörper zu falten, so dass es ziemlich einfach ist, zwei Methoden direkt übereinander anzuzeigen, selbst wenn ihre tatsächliche Position in der Quelldatei 700 Zeilen auseinander liegt.
Ich würde vorsichtig sein, wenn ich mit der Position von Methoden in der tatsächlichen Quelle herumspiele. Ihre IDE sollte Ihnen die Möglichkeit geben, die Quelle so anzuzeigen, wie Sie es möchten. Dies ist besonders wichtig, wenn Sie an einem Projekt arbeiten, bei dem Entwickler ihre IDE ihrer Wahl verwenden können.
Meine Bestellung, hier kommt es.
Normalerweise setze ich zuerst die Statik ein.
Als nächstes kommen Member-Variablen und -Eigenschaften, eine Eigenschaft, die auf ein bestimmtes Mitglied zugreift, wird zusammen mit diesem Mitglied gruppiert. Ich versuche, verwandte Informationen zu gruppieren, z. B. alle Zeichenfolgen, die Pfadinformationen enthalten.
Drittens ist der Konstruktor (oder Konstruktoren, wenn Sie mehrere haben).
Danach folgen Sie den Methoden. Diese werden nach dem sortiert, was für diese bestimmte Klasse logisch erscheint. Ich gruppiere Methoden oft nach ihrer Zugriffsebene: privat, geschützt, öffentlich. Aber ich hatte kürzlich eine Klasse, die viele Methoden aus ihrer Basisklasse überschreiben musste. Da ich dort viel gearbeitet habe, habe ich sie in einer Gruppe zusammengefasst, unabhängig von ihrer Zugriffsebene.
Meine Empfehlung: Ordnen Sie Ihre Kurse so an, dass sie Ihren Arbeitsablauf unterstützen. Ordne sie nicht einfach an, nur um Ordnung zu haben. Die für die Bestellung aufgewendete Zeit sollte eine Investition sein, die Ihnen hilft, mehr Zeit zu sparen, die Sie ansonsten benötigen, um nach oben oder unten zu scrollen.
In C # verwende ich #region
, um diese Gruppen voneinander zu trennen, aber das ist Geschmackssache. Es gibt viele Leute, die Regionen nicht mögen. Das tue ich.
Ich platziere die neueste Methode, die ich gerade erstellt habe, auf die Klasse. Wenn ich das Projekt öffne, bin ich wieder bei der letzten Methode, die ich entwickle. Einfacher für mich, um "in der Zone" zurück zu kommen.
Es spiegelt auch die Tatsache wider, dass die Methode (die andere Methoden verwendet), die ich gerade erstellt habe, die oberste Ebene anderer Methoden ist.
Gruppieren Sie zusammen Funktionen, seien Sie nicht zu sehr gezwungen, alle privaten Funktionen auf den Boden zu stellen. Ebenso, imitieren Sie die Design-Rationale von C # -Eigenschaften, verwandte Funktionen sollten in unmittelbarer Nähe zueinander sein, das C # -Sprachkonstrukt für Eigenschaften verstärkt diese Idee.
Vor ein paar Jahren habe ich viel zu viel Zeit damit verbracht, über diese Frage nachzudenken, und habe ein fürchterlich komplexes System entwickelt, um die Deklarationen innerhalb einer Klasse zu ordnen. Die Reihenfolge hängt vom Zugriffsspezifizierer ab, unabhängig davon, ob eine Methode oder ein Feld statisch, vorübergehend, flüchtig usw. war.
Es hat sich nicht gelohnt. Meiner Erfahrung nach hat man von solch einem komplexen Arrangement keinen echten Nutzen.
Was ich heute mache, ist viel einfacher:
Ich bin mir ziemlich sicher, dass es ein visuelles Studio-Add-In gab, das die Klassenmitglieder im Code neu ordnen konnte.
also ctors an der Spitze der Klasse dann statische Methoden dann Instanz Methoden ... so etwas
Leider kann ich mich nicht an den Namen dieses Addins erinnern! Ich denke auch, dass dieses Addin kostenlos war! vielleicht kann uns jemand anderes helfen?
Meine persönliche Meinung zur Strukturierung einer Klasse lautet wie folgt:
Ich bin streng mit
Ich verwende die automatischen Formatierungsfunktionen einer IDE zu jeder Zeit. Ich treffe ständig Ctrl+Shift+F
, wenn ich arbeite. Ich exportiere automatische Formatierungsfunktionen in eine XML-Datei, die ich überall mit mir trage.
Es hilft auf der Spur bei Fusionen und Rückfällen. Und es ist die Art von Dingen, die Sie in Ihrer IDE automatisieren oder Prozesse aufbauen können, so dass Sie dafür keine Gehirnzelle ins Schwitzen bringen müssen.
Ich behaupte nicht MY WAY ist der Weg. Aber wähle etwas aus, konfiguriere es, benutze es konsequent, bis es ein Reflex wird, und vergiss es so.
Tags und Links language-agnostic refactoring