2011-01-01 5 views
2

Persönlich kann ich Region Tags nicht ertragen, aber eindeutig haben sie breite Verbreitung Appell für die Organisation von Code, also möchte ich die Temperatur des Wassers für andere MS-Entwickler zu testen auf diese Idee zu testen.Wer mag # Regionen in Visual Studio?

Mein persönliches Gefühl ist, dass jede Art von dummem Trick zur Vereinfachung des Codes nur dazu dient, schreckliches Kodierungsverhalten zu fördern, wie mangelnde Kohäsion, unklare Absicht und schlechte oder unvollständige Kodierungsstandards.

Ein Programmierer sagte mir, dass Code-Regionen dazu beitragen, Codierungsstandards zu fördern, indem klar gemacht wird, wo ein anderer Programmierer seine Beiträge einbringen soll.

Aber um ehrlich zu sein, klingt das wie eine Ladung Pferdemist für mich. Wenn Sie einen Standard haben, ist es Aufgabe des Programmierers zu verstehen, was dieser Standard ist ... Sie sollten ihn nicht in jeder einzelnen Klassendatei definieren müssen.

Und nichts ist ärgerlicher, als wenn der gesamte Code beim Öffnen einer Datei minimiert wird. Ich weiß, dass Strg + M, L wird alles öffnen, aber dann haben Sie die abscheulichen "Hash-Region Definition" öffnen und schließen Zeilen zu lesen.

Sie sind nur irritierend.

Meine stetige schnelle Kodierungsphilosophie ist, dass alle Programmierer sich bemühen sollten, klaren, prägnanten und kohärenten Code zu erstellen. Regions-Tags dienen nur dazu, Rauschen und redundante Absichten zu erzeugen.

Region Tags wäre in einer gut durchdachten und intentionierten Klasse strittig.

Der einzige Ort, an dem sie für mich einen Sinn ergeben, ist der automatisch generierte Code, denn Sie sollten das nie außerhalb Ihrer persönlichen Neugier lesen müssen.

+0

Dies ist ein blog rant, keine Frage. – tvanfosson

+0

Eigentlich frage ich, was andere Leute über Regionen denken. Also ja, es ist eine Frage – Nicholas

+0

@tvanfosson Ich gehe davon aus, dass ich, sobald ich genug Punkte gesammelt habe, in der Lage sein würde, den vorzeitigen Abschluss dieser Diskussion anzufechten. Ich sehe nicht, warum offene Fragen ohne Schwarz-Weiß-Antworten geschlossen werden sollten. Konfrontation und Argumentation könnten auch als Opposition und Diskussion formuliert werden. Dies ist oft der Geist des Programmierens, und Argumente für oder gegen Ideen zu präsentieren, die unsere tägliche Arbeit beeinflussen, scheint eine ziemlich würdige Diskussion zu sein. – Nicholas

Antwort

6

StyleCop doesn't like regions:

SA1124: DoNotUseRegions

Ursache

Der Code # C eine Region enthält.

Regelbeschreibung

Eine Verletzung dieser Regel tritt auf, wenn eine Region innerhalb des Code an beliebiger Stelle platziert wird. In vielen Editoren, einschließlich Visual Studio, wird die Region standardmäßig ausgeblendet und der Code in der Region ausgeblendet. Es ist im Allgemeinen eine schlechte Übung, Code zu verstecken, da dies zu schlechten Entscheidungen führen kann, wenn der Code im Laufe der Zeit beibehalten wird.

Wie Verstöße zu beheben

Um einen Verstoß gegen diese Regel zu beheben, entfernen Sie die Region aus dem Code.

Es gibt some discussion darüber, ob dies eine vernünftige Regel ist.

Der Konsens scheint zu sein, dass manche Leute Regionen mögen und andere nicht - es liegt an den einzelnen Teams zu entscheiden. Das Wichtigste ist, einen einheitlichen Stil in Ihrem Projekt zu verwenden.

Eine Stelle, an der Regionen möglicherweise akzeptabel sind, besteht darin, alle Methoden zu gruppieren, die eine bestimmte Schnittstelle implementieren. Es ist erwähnenswert, dass Visual Studio automatisch eine Region hinzufügt, wenn Sie die Codegenerierungsfunktion verwenden, um Methodenstubs zum Implementieren einer Schnittstelle bereitzustellen.

Der einzige Ort, an dem sie für mich einen Sinn ergeben, ist der automatisch generierte Code, denn Sie sollten das nie außerhalb Ihrer persönlichen Neugier lesen müssen.

Die partial class feature ist besser zum Trennen von automatisch generierten Code aus manuell generierten Code innerhalb der gleichen Klasse.

Bei der Arbeit mit automatisch generierten Quellen kann der Klasse Code hinzugefügt werden, ohne dass die Quelldatei neu erstellt werden muss. Visual Studio verwendet diesen Ansatz, wenn Windows Forms, Webdienst-Wrappercode usw. erstellt werden. Sie können Code erstellen, der diese Klassen verwendet, ohne die von Visual Studio erstellte Datei ändern zu müssen.

+0

Ha ha .. das ist großartig. – Nicholas

+1

Konsistenz ist wichtig, aber ebenso wichtig sind Zusammenhalt, Klarheit und Lesbarkeit. Wenn Ihr Stil diese anderen Tugenden verletzt, können Sie sich nicht wirklich hinter der Konsistenz verstecken. – Nicholas

+0

Ich wünschte, mehr Leute würden diese Antwort abstimmen – Nicholas

-1

IHMO, wenn Sie #region Abschnitt in einer Klasse haben, bedeutet dies, dass Sie zwei Verhaltensweisen in Ihrer Klasse haben, und so sollten Sie Ihre Klasse in zwei Objekte aufteilen.

+0

Aber was ist mit dem Fall, wo Sie Bereiche für private Variablen, öffentliche Methoden, Konstruktoren erstellen ... usw. – Nicholas

+0

Es ist nicht so einfach. Zwei Objekte haben Dinge wie z. B. separate Lebensdauern. Und nicht alle Multi-Verhaltensklassen können aufgeteilt werden. – Puppy

+0

Was meinst du damit, dass die Klasse zwei Verhaltensweisen hat? Regionen ändern nicht, wie der Code in irgendeiner Weise funktioniert, sie dienen lediglich dazu, den Quellcode zu organisieren. – Guffa

2

Ich verwende Regionen, um größere Konstrukte in einer Klasse zu organisieren, dh. eine Dependency-Eigenschaft mit Callback und Methoden, die dadurch aufgerufen werden, z. Sie haben eine DP, die eine IEnumerable<T> nimmt, und Sie möchten das schwache Ereignismuster verwenden, um auf INotifyCollectionChanged zu antworten. Das kann etwas Code erfordern, und da ich es nach dem Codieren nicht anfassen werde, lege ich es in eine Region.

Allerdings, wenn Sie auf Regionen zurückgreifen, um Ihre Logik zu strukturieren, ist dies strenger Code-Geruch und das ist, was die StyleCop-Regel in Marks Beitrag zeigt.

+0

Ich bin immer noch misstrauisch für diese Verwendung, aber ich schätze Ihren Kommentar über die Strukturierung der Logik. – Nicholas

+0

Das Problem, das Leute (und StyleCop) mit Regionen haben, ist ziemlich einfach - es kann Designfehler verbergen. Dies ist nicht ganz der Fall, wenn man eine DP in eine Region bringt. Eine vollständige DP mit begleitenden Methoden kann sehr viel Code erfordern, und wenn man bedenkt, dass man normalerweise nicht mit diesem Standardcode arbeitet, sehe ich kein Problem mit der Gruppierung zusammen mit einer Region. – Femaref

6

Ich mag Regionen und benutze sie die ganze Zeit. Ich benutze sie, um Mitglieder derselben Art in Klassen zu gruppieren.

Sie haben bereits die Möglichkeit, Methoden, Klassen und Namespaces im Editor zu reduzieren. Regionen bieten Ihnen die Möglichkeit, eine weitere Ebene zu erstellen, auf der Sie den Code so anordnen können, dass er dem entspricht, was Sie für wichtig halten.

+0

Richtig, ich habe dieses Argument schon einmal gehört, aber gute Absicht, die Namen aufdeckt, sollte Regionen noch strittiger machen. Warum sollten Sie in einer Klasse, die gut aufgebaut und klar ist, zusätzlichen Lärm erzeugen? Und das kollabierte Standardverhalten bricht alle Ihre gut gemeinten Gruppierungen zusammen ... was irritierend ist, wenn man den Code eines anderen liest. – Nicholas

+0

@Nicholas: Die besten Namen lassen den Code nicht buchstäblich verschwinden. – Puppy

+0

@DeadMG Das mag stimmen, aber warum sollten Sie Code künstlich verschwinden lassen? Sie müssen es lesen, um es zu verstehen. Wenn es existiert, möchte ich es lesen, und ich möchte nicht, dass diese lauten # Region-Tags mir in den Weg kommen. – Nicholas

1

während ich programmiere, benutze ich sehr viele Regionen, die mir helfen, meinen Code organisiert zu halten und mich nur auf Teile konzentrieren zu können, die mich interessieren. Ich füge immer Kommentare zu den Regionen hinzu und worum geht es? Aber wenn ich fertig bin, entferne ich sie immer. Es ist ein praktisches Werkzeug, das ist alles.

+0

Sie verwenden sie also, um Code zu organisieren, während Sie ihn erstellen?Ich schätze, Sie würden dann niemals Code für ein Repository mit Regions-Tags festlegen. – Nicholas

+0

Ja, ich würde es niemals mit Regions-Tags begehen. denn ich erwarte nicht, dass andere meiner regionalen Logik folgen. Aber es ist hilfreich auf einer persönlichen Ebene – elasticrash

+0

OK, nun kann ich nicht widersprechen. Ich mache das nicht persönlich, weil ich gerne meinen ganzen Code offen und vor mir sehe. Ich möchte mich bemühen, ein diskretes Stück Funktionalität bis zu einem akzeptablen Grad der Fertigstellung zu meißeln, und ich möchte jederzeit sehen, dass es voll ist. – Nicholas

3

Ich denke, dass #region völlig in Ordnung ist. Ich habe es nie selbst benutzt, aber wenn Sie eine große oder komplexe Klasse haben, kann es helfen, das zu finden, was Sie suchen. Stellen Sie sich vor, Sie implementieren ID3D10Device1 - das sind über hundert zu implementierende Methoden. Willst du sie einfach an einen Ort schmeißen?

+0

Ich musste noch nie etwas implementieren, das nicht in diskretere Stücke verständlichen Codes aufgeteilt werden konnte. Meiner Erfahrung nach war #region nie eine gute Idee, aber ich gebe zu, dass bestimmte Arten von Funktionalität nicht modular implementiert werden können. – Nicholas