2010-09-23 7 views
7

Ich bin mir zunehmend bewusst, dass mein Code in jeder einzelnen Datei oft Hunderte von Zeilen umfassen kann, und obwohl ich weiß, dass die Implementierung solide ist, fühlt sie sich immer noch chaotisch und unorganisiert an.Wie organisieren Sie große Code-Dateien?

Ich verstehe, dass es Situationen gibt, wo viel Code notwendig ist, aber was ist der beste Weg, um alles zu organisieren?

Ich habe darüber nachgedacht, Variablen von Methoden, private s von public s und internals zu trennen, aber ich will nicht, weil ich nicht helfen kann, zu denken, dass die Komponenten einer Klasse in einer Datei gehören.

Diese ganze Sache ist zusammengesetzt, wenn ich mit dem Codebehind eines WPF-Fensters arbeite, die immer mit einer exponentiellen Rate in einem riesigen Durcheinander sehr schnell zu wachsen scheinen.

Außerdem: C# hat ein Schlüsselwort namens partial, mit dem Sie eine Klasse über eine beliebige Anzahl von Dateien aufteilen können, ohne die Funktionalität zu beeinträchtigen. Mir ist jedoch aufgefallen, dass Microsoft anscheinend nur partial verwendet, um generierten Code vor Ihnen zu verbergen (Winforms/WPF). Das führt mich zu der Frage, ob das Teilen einer Klasse einfach weil es viele Zeilen hat, eine legitime Verwendung von partial ist - oder?

Danke

+3

Wenn Sie eine Klasse in mehrere "partielle" Dateien aufteilen können, die logisch getrennt sind, sollten Sie die Klasse stattdessen auf mehrere Klassen aufteilen. Sie könnten zu viel Verantwortung an einem Ort haben. – Oded

+2

Verwenden Sie nur teilweise für partiell generierte Klassen. –

Antwort

13

Trennen Sie Ihren Code in Verantwortlichkeiten. Definieren Sie für jede Verantwortung einen einzelnen Typ. Das heißt, folgen Sie der Single Responsibility Principal. Dies führt zu kleineren Codeeinheiten, von denen jede eine sehr spezifische Funktion ausführt. Dies führt nicht nur zu kleineren Dateien, sondern auch zu einem besseren Design und einer besseren Wartbarkeit.

+0

Wie gilt dies für eine WPF-Code-Behind-Klasse? – Gabe

+0

@Gabe: Die meisten (oft alle) Funktionen einer Ansicht befinden sich in einem oder mehreren Ansichtsmodellen. Das Folgen von SRP bedeutet, dass jede VM eine einzige Verantwortung trägt, anstatt alles, was mit der Ansicht in Beziehung steht, in eine VM zu integrieren. Das heißt, es ist manchmal in Ordnung, Code im Code-Behind zu haben, wenn es strikt auf die View bezogen ist (nicht Business-Logik) und nicht von anderen Views geteilt wird (keine gemeinsame Komponente oder Verhalten). In diesem Fall wird SRP immer noch aufrecht erhalten, weil die Verantwortung darin besteht, sozusagen die Sichtweise zu manifestieren. –

2

Ich neige dazu, Eigenschaften, Konstruktoren, Methoden und Hilfsmethoden (private Methoden) zusammen mit Regionen zu gruppieren. Wenn ich viele Methoden habe, erstelle ich mehr Regionen basierend auf dem was sie tun (besonders gut für Überladungen). Und wenn Sie von Überlastungen sprechen, versuchen Sie, Ihren Code mit optionalen Parametern zu minimieren.

Soweit ich verstehe partiell bedeutet, dass die Klasse in zwei separaten Dateien existiert. Webforms und Steuerelemente sind partiell, da der andere "Teil" der Datei die zugehörige as [p | c] x-Datei ist.

+3

Regionen: einfach Nein sagen;) –

+0

@Kent - sie sind nicht so schlecht. Sie haben mein Haus nur einmal niedergebrannt. – Oded

+3

Die Verwendung von Regionen in Klassen-Dateien ist oft ein Zeichen von schlechtem OOD ... Und verberge niemals Komplexität! Mach es weniger komplex ;-) –

9

Wenn Ihre Dateien groß sind, weil sie eine einzelne Klasse/Struktur enthalten, die groß ist, dann ist dies normalerweise (aber nicht immer) ein Hinweis darauf, dass Ihre Klasse mehrere Probleme behandelt und in eine Reihe kleinerer, mehr spezialisierte Klassen.

1

Ich gehe auf die Theorie, dass, wenn Sie eine ganze Methode auf einem Bildschirm sehen können (dh Sie müssen scrollen), sollten Sie die Methode in weitere Methoden brechen - entweder in der gleichen Klasse oder wenn der Code verwendet wird mehr als einmal in eine Helferklasse.

5

Wenn ich Sie verstehe, ist Ihr Hauptproblem, dass Ihre Formulare am Ende zu groß sind, was zu den Klassen für die Formulare mit zu viel Code führt, was ganz normal ist, wenn Ihre Formulare nicht sehr einfach sind. Um dies zu minimieren, verwenden Sie User Controls. Wenn Sie die Steuerelemente in andere Klassen verschieben, verschieben Sie den Code auch in andere Klassen.

Manchmal kann es etwas schwieriger werden, zwischen den Steuerelementen zu kommunizieren, aber das wird normalerweise mehr als wettgemacht durch die Tatsache, dass der Code in jeder Klasse viel leichter zu verstehen ist.

0

Wir verwenden stylecop. Es hilft ein wenig, weil es eine Struktur auf Ihrem Code erzwingt und eine Reihenfolge für was sollte wo angezeigt werden. So können Sie sich in größeren Dateien etwas intuitiver orientieren.