Frage

Für diejenigen unter Ihnen, die in der Visual Studio-Umgebung arbeiten: Was halten Sie davon, Ihren Code in #regions zu verpacken?(Oder wenn eine andere IDE etwas Ähnliches hat ...)

War es hilfreich?

Lösung

In 9 von 10 Fällen bedeutet Code-Folding, dass Sie es versäumt haben, den Code zu verwenden SoC-Prinzip für das, was es wert ist.
Bei Teilkursen geht es mir mehr oder weniger ähnlich.Wenn Sie einen Codeabschnitt haben, der Ihrer Meinung nach zu groß ist, müssen Sie ihn in überschaubare (und wiederverwendbare) Teile zerlegen und nicht verstecken oder aufteilen.
Es wird Sie beißen, wenn das nächste Mal jemand es ändern muss, und Sie können die Logik, die in einem 250-Zeilen-Monster einer Methode verborgen ist, nicht erkennen.

Ziehen Sie, wann immer Sie können, Code aus der Hauptklasse in eine Hilfs- oder Factory-Klasse.

foreach (var item in Items)
{
    //.. 100 lines of validation and data logic..
}

ist nicht so lesbar wie

foreach (var item in Items)
{
    if (ValidatorClass.Validate(item))
        RepositoryClass.Update(item);
}



Meine 0,02 $ sowieso.

Andere Tipps

Darüber wurde am gesprochen Coding-Horror.

Mein persönlicher Glaube ist, dass sie nützlich sind, aber wie alles im Übermaß auch zu viel sein kann.

Ich verwende es, um meine Codeblöcke wie folgt zu ordnen:
Aufzählungen
Erklärungen
Konstrukteure
Methoden
Ereignishandler
Eigenschaften

Manchmal arbeitet man vielleicht in einem Team, in dem #Regionen gefördert oder gefordert werden.Wenn Sie wie ich sind und es nicht ertragen, mit gefaltetem Code herumzuspielen, können Sie die Gliederung für C# deaktivieren:

  1. Optionen -> Texteditor -> C# -> Registerkarte „Erweitert“.
  2. Deaktivieren Sie „Gliederungsmodus aktivieren, wenn Dateien geöffnet werden“.

Ich verwende #Region, um hässlichen und nutzlosen automatisch generierten Code zu verbergen, der eigentlich in den automatisch generierten Teil der Teilklasse gehört.Wenn Sie jedoch mit alten oder aktualisierten Projekten arbeiten, können Sie sich diesen Luxus nicht immer leisten.

Was andere Faltarten betrifft, falte ich ständig Funktionen.Wenn Sie die Funktion gut benennen, müssen Sie nie hineinschauen, es sei denn, Sie testen etwas oder schreiben es neu.

Ich verstehe zwar das Problem, das Jeff et al.al.Habe mit Regionen, was ich nicht verstehen ist, warum schlagen STRG+M,STRG+L Das Erweitern aller Regionen in einer Datei ist sehr schwierig.

ich benutze Textmate (Nur Mac) mit Code-Faltung und ich finde es wirklich nützlich für Faltfunktionen. Ich weiß, was meine „getGet“-Funktion macht, ich brauche sie nicht, um 10 Zeilen ach so wertvollen Platz auf dem Bildschirm zu beanspruchen.

Ich verwende es nie, um eine for-Schleife, eine if-Anweisung oder ähnliches zu verbergen, es sei denn, ich zeige den Code jemand anderem, wobei ich den gesehenen Code verstecke, um zu vermeiden, dass derselbe Code zweimal angezeigt wird.

Ich bevorzuge Teilklassen gegenüber Regionen.

Die umfassende Nutzung von Regionen durch andere erweckt bei mir auch den Eindruck, dass irgendwo jemand gegen das Single-Responsibility-Prinzip verstößt und versucht, zu viele Dinge mit einem Objekt zu tun.

@Tom

Es werden Teilklassen bereitgestellt, damit Sie den vom Tool automatisch generierten Code von allen Anpassungen trennen können, die Sie möglicherweise vornehmen müssen, nachdem die Code-Generierung ihre Arbeit geleistet hat.Das bedeutet, dass Ihr Code nach der erneuten Ausführung des Codegens intakt bleibt und nicht überschrieben wird.Das ist eine gute Sache.

Ich bin kein Fan von Teilklassen – ich versuche, meine Klassen so zu entwickeln, dass jede Klasse ein ganz klares, einzelnes Problem hat, für das sie verantwortlich ist.Aus diesem Grund glaube ich nicht, dass etwas mit einer klaren Verantwortung auf mehrere Dateien aufgeteilt werden sollte.Deshalb mag ich Teilunterricht nicht.

Abgesehen davon bin ich bezüglich der Regionen unschlüssig.Meistens benutze ich sie nicht;Allerdings arbeite ich jeden Tag mit Code, der Regionen einschließt – manche Leute gehen sehr intensiv damit um (sie falten private Methoden in eine Region und dann jede Methode in ihre eigene Region), und andere gehen vorsichtig damit um (falten Aufzählungen zusammen, Attribute zusammenklappen usw.).Meine allgemeine Faustregel lautet derzeit, dass ich Code nur dann in Regionen einfüge, wenn (a) die Daten wahrscheinlich statisch bleiben oder nicht sehr oft berührt werden (wie bei Aufzählungen) oder (b) wenn es Methoden gibt, die dies tun werden aufgrund der Unterklassenbildung oder der Implementierung abstrakter Methoden notwendigerweise implementiert, werden aber wiederum nicht sehr oft berührt.

Regionen dürfen niemals innerhalb von Methoden verwendet werden.Sie können zum Gruppieren von Methoden verwendet werden, dies muss jedoch mit äußerster Vorsicht erfolgen, damit der Leser des Codes nicht verrückt wird.Es macht keinen Sinn, Methoden anhand ihrer Modifikatoren zu falten.Aber manchmal kann das Falten die Lesbarkeit verbessern.Für z.B.Es kann hilfreich sein, einige Methoden zu gruppieren, die Sie zur Umgehung einiger Probleme verwenden, wenn Sie eine externe Bibliothek verwenden und diese nicht zu oft besuchen möchten.Aber der Programmierer muss immer nach Lösungen suchen, wie zum Beispiel in diesem speziellen Beispiel die Bibliothek mit geeigneten Klassen zu umschließen.Wenn alles andere fehlschlägt, verwenden Sie Falten, um die Lesbarkeit zu verbessern.

Das ist nur eine dieser dummen Diskussionen, die ins Nichts führen.Wenn Sie Regionen mögen, nutzen Sie sie.Wenn Sie dies nicht tun, konfigurieren Sie Ihren Editor so, dass er sie deaktiviert.Da sind alle glücklich.

Das Falten von Regionen wäre in Ordnung, wenn ich Regionsgruppierungen nicht manuell verwalten müsste, die auf Funktionen meines Codes basieren, die für die Sprache intrinsisch sind.Beispielsweise weiß der Compiler bereits, dass es sich um einen Konstruktor handelt.Das Codemodell der IDE weiß bereits, dass es sich um einen Konstruktor handelt.Wenn ich jedoch eine Ansicht des Codes sehen möchte, in der die Konstruktoren gruppiert sind, muss ich aus irgendeinem Grund die Tatsache noch einmal betonen, dass es sich bei diesen Dingen um Konstruktoren handelt, indem ich sie physisch zusammenplatziere und dann eine Gruppe um sie herum bilde.Das Gleiche gilt für jede andere Art, eine Klasse/Struktur/Schnittstelle aufzuteilen.Was passiert, wenn ich meine Meinung ändere und die öffentlichen/geschützten/privaten Inhalte zunächst in Gruppen aufgeteilt und dann nach Mitgliedsart gruppiert sehen möchte?

Die Verwendung von Regionen zum Markieren öffentlicher Eigenschaften (zum Beispiel) ist genauso schlimm wie die Eingabe eines redundanten Kommentars, der nichts zu dem hinzufügt, was bereits aus dem Code selbst erkennbar ist.

Um zu vermeiden, dass für diesen Zweck Regionen verwendet werden müssen, habe ich ein kostenloses Open-Source-Add-In für die Visual Studio 2008-IDE namens Ora geschrieben.Es stellt automatisch eine gruppierte Ansicht bereit, sodass es weitaus weniger notwendig ist, physische Gruppierungen beizubehalten oder Regionen zu verwenden. Vielleicht finden Sie es nützlich.

Ich stelle im Allgemeinen fest, dass bei der Arbeit mit Code wie Ereignissen in C#, bei dem es etwa 10 Codezeilen gibt, die eigentlich nur Teil einer Ereignisdeklaration sind (die EventArgs-Klasse, die Delegiertendeklaration und die Ereignisdeklaration), ein Bereich um sie herum gelegt und dann ausgefaltet wird macht es übrigens etwas lesbarer.

Ich denke, dass es ein nützliches Werkzeug ist, wenn es richtig verwendet wird.In vielen Fällen bin ich der Meinung, dass Methoden, Aufzählungen und andere Dinge, die oft gefaltet werden, kleine Blackboxen sein sollten.Sofern Sie sie nicht aus irgendeinem Grund ansehen müssen, spielt ihr Inhalt keine Rolle und sollte so versteckt wie möglich sein.Ich falte jedoch niemals private Methoden, Kommentare oder innere Klassen.Methoden und Aufzählungen sind wirklich die einzigen Dinge, die ich falte.

Mein Ansatz ähnelt einigen anderen hier und verwendet Regionen, um Codeblöcke in Konstruktoren, Eigenschaften, Ereignisse usw. zu organisieren.

Es gibt einen hervorragenden Satz VS.NET-Makros von Roland Weigelt, der in seinem Blogeintrag verfügbar ist: Bessere Tastaturunterstützung für #region ...#endregion.Ich benutze diese seit Jahren und ordne Strg+ zu.um die aktuelle Region zu reduzieren und Strg++ um sie zu erweitern.Finden Sie, dass es viel besser funktioniert als die Standard-VS.NET-Funktionalität, die alles faltet/entfaltet.

Ich persönlich verwende ständig #Regions.Ich finde, dass es mir hilft, Dinge wie Eigenschaften, Deklarationen usw. voneinander zu trennen.

Das ist wahrscheinlich auch eine gute Antwort!

Coding-Horror

Bearbeiten:Verdammt, Pat ist mir zuvorgekommen!

Ich selbst bevorzuge #Regionen, aber ein alter Kollege konnte es nicht ertragen, wenn Dinge versteckt werden.Ich habe seinen Standpunkt verstanden, als ich an einer Seite mit 7 #Regionen gearbeitet habe, von denen mindestens 3 automatisch generiert wurden und denselben Namen hatten, aber im Allgemeinen denke ich, dass sie eine nützliche Möglichkeit sind, Dinge aufzuteilen und alles weniger zu halten überladen.

Ich habe wirklich kein Problem damit, #region zum Organisieren von Code zu verwenden.Persönlich richte ich normalerweise verschiedene Regionen für Dinge wie Eigenschaften, Ereignishandler und öffentliche/private Methoden ein.

Einiges davon erledigt Eclipse in Java (oder PHP mit Plugins) selbst.Ermöglicht das Zusammenklappen von Funktionen usw.Ich tendiere dazu, es zu mögen.Wenn ich weiß, was eine Funktion tut, und ich nicht daran arbeite, muss ich sie mir nicht ansehen.

Emacs verfügt über einen Falt-Moll-Modus, den ich aber nur gelegentlich aktiviere.Meistens, wenn ich an einer Monstrosität arbeite, die ich von einem anderen Physiker geerbt habe, der offensichtlich weniger Unterricht hatte oder sich weniger um seine Programmierpraktiken kümmerte.

Verwendung von Regionen (oder anderweitigem Faltcode) sollen haben nichts mit Code-Gerüchen (oder deren Verstecken) oder einer anderen Idee zu tun, Code zu verstecken, den die Leute nicht „leicht“ sehen sollen.

Bei Regionen und Code-Faltung geht es eigentlich darum, eine Möglichkeit zu bieten, Codeabschnitte einfach zu gruppieren, die reduziert/gefaltet/ausgeblendet werden können, um die Menge an unnötigem „Rauschen“ rund um das, woran Sie gerade arbeiten, zu minimieren.Wenn Sie die Dinge richtig einrichten (das bedeutet, dass Sie Ihren Regionen tatsächlich einen sinnvollen Namen geben, z. B. den Namen der enthaltenen Methode), können Sie alles außer der Funktion, die Sie gerade bearbeiten, ausblenden und dennoch einen gewissen Kontext beibehalten, ohne die andere tatsächlich sehen zu müssen Codezeilen.

Für diese Ideen sollte es wahrscheinlich einige Best-Practice-Typrichtlinien geben, aber ich verwende Regionen häufig, um eine Standardstruktur für meine Codedateien bereitzustellen (ich gruppiere Ereignisse, klassenweite Felder, private Eigenschaften/Methoden, öffentliche Eigenschaften/Methoden).Jede Methode oder Eigenschaft verfügt auch über eine Region, wobei der Regionsname der Methoden-/Eigenschaftsname ist.Wenn ich eine Reihe überladener Methoden habe, ist der Regionsname die vollständige Signatur und dann wird die gesamte Gruppe in einen Bereich eingeschlossen, der nur der Funktionsname ist.

Ich persönlich hasse Regionen.Der einzige Code, der meiner Meinung nach in Regionen sein sollte, ist generierter Code.Wenn ich eine Datei öffne, beginne ich immer mit Strg+M+O.Dies klappt auf Methodenebene.Wenn Sie Regionen haben, sehen Sie nur Regionsnamen.

Vor dem Einchecken gruppiere ich Methoden/Felder logisch, damit es nach Strg+M+O in Ordnung aussieht.Wenn Sie Regionen benötigen, haben Sie zu viele Zeilen in Ihrer Klasse.Ich finde auch, dass das sehr häufig vorkommt.

Region ThisLooksLikeWellOrganizedCodeBecauseIUseRegions

// totaler Müll, keine Struktur hier

Endregion

Aufzählungen

Eigenschaften

.ctors

Methoden

Ereignishandler

Das ist alles, wofür ich Regionen verwende.Ich hatte keine Ahnung, dass man sie innerhalb von Methoden verwenden kann.

Klingt nach einer schrecklichen Idee :)

Der Coding-Horror Der Artikel hat mich auch tatsächlich zum Nachdenken gebracht.

Im Allgemeinen werde ich in großen Klassen einen Bereich um die Mitgliedsvariablen, Konstanten und Eigenschaften legen, um die Menge an Text zu reduzieren, durch die ich scrollen muss, und alles andere außerhalb eines Bereichs zu belassen.Auf Formularen gruppiere ich die Dinge im Allgemeinen in „Mitgliedsvariablen, Konstanten und Eigenschaften“, Formularfunktionen und Ereignishandler.Auch dies dient eher dazu, dass ich nicht durch viel Text scrollen muss, wenn ich nur einige Event-Handler überprüfen möchte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top