08 September 2010 Fail, FailCode, region, Style Robert Muehsig

image

Das Thema ist wahrscheinlich schon ewig alt, aber durch einen übermotivierten Kollegen, der überall "regions” in den Code reingeballert hat, kam das Thema bei uns wieder auf: Sind #regions gut oder schlecht? Für alle die nicht wissen worum es geht: #region auf MSDN

 

 

Schauen wir uns mal ein Beispiel an...

Ich mach die User.cs auf und sehe das:

image

Wobei "...” für diverse andere Sachen noch stehen kann.

Der erste Eindruck:

Ist ja aufgeräumt.

Aber jetzt mal ehrlich...

Mich interessiert der Code, nicht irgendwelche Blöcke. Mit #region versteckt man den Code doch nur. Wenn ich in die User.cs reinschaue, möchte ich auch den Code auf den ersten Blick sehen. Ja, es gibt ein Tastenkürzel um alles aufzublenden. Aber wozu überhaupt diese #region Blöcke?

Code Smell

Häufig habe ich #regions in Klassen gefunden, welche etliche hundert Zeilen lang waren. Durch die #regions sollte der Code etwas strukturierter werden.

Man schaut z.B. in eine Methode und erblickt folgendes:

image

Mir geht es dann meisten so, dass ich ja trotzdem den Code sehen will. Also mal reinklicken:

image

Spannend. Nagut... was ist denn bei Y los?

image

Alle guten Dinge sind drei. Was steht hinter Z?

image

Super, oder? Der Code ist natürlich hier in meinem Beispiel Blödsinn, aber hinter X, Y und Z können sich kilometerlange Codeblöcke verstecken.

Warum ich #regions für missverstandenen Ordnungssinn halte:

IMHO bringen sie keine wirklichen Vorteile mit sich. Auf dem ersten Blick sieht es nett aus, aber am Ende könnte man auch folgende Schluss daraus ziehen:

Die Klasse hat zu viele Aufgaben und muss deswegen optisch etwas aufgehübscht werden. Besser: Aufsplitten! Und damit meine ich nicht in "Partial Classes”, sondern in getrennte Funktionseinheiten.

Interface Implementierungen

Ein anderes Beispiel: Visual Studio macht Interface Implementierungen grundsätzlich in #regions. Schön finde ich es nicht (und man kann es auch abstellen ;) ). Trägt es wirklich zur Strukturierung bei? IMHO kaschiert das #regions, für einen besseren Überblick gibt es spätestens seit VS2010 auch andere nette Tools - da brauch ich keine #regions.

Zudem...

Wenn man "On-the-fly” (z.B. in TDD Manier) Code erstellt, dann packt Visual Studio den Code auch irgendwo hin. Damit ist das System mit den #regions auch zum Scheitern verurteilt.

Weitere Anti-#region Posts

In diesem Post ist auch ähnlich beschrieben, warum er #regions nicht mag. Hier noch weitere:


Written by Robert Muehsig

Software Developer - from Saxony, Germany - working on primedocs.io. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de