192 Stimmen

Eine Klasse pro Datei Regel in .NET?

Ich befolge diese Regel, aber einige meiner Kollegen sind anderer Meinung und argumentieren, dass eine Klasse, wenn sie kleiner ist, im selben Datei mit anderen Klassen belassen werden kann.

Ein weiteres Argument, das ich die ganze Zeit höre, ist "Selbst Microsoft macht das nicht, warum sollten wir also?"

Was ist der allgemeine Konsens dazu? Gibt es Fälle, in denen dies vermieden werden sollte?

284voto

James Punkte 12410

Ich hasse es, wenn Leute in absoluten Begriffen denken und sagen, dass man dies oder das niemals mit etwas Subjektivem und Pingeligem wie diesem tun sollte, als ob wir uns alle an die dumme Vorstellung von richtig und falsch von jemand anderem anpassen müssten. Unterer Strich: Es ist völlig in Ordnung, mehr als eine Klasse pro Datei zu haben, wenn es sinnvoll ist. Mit sinnvoll meine ich Dinge wie:

  1. Macht den Code einfacher zu verstehen und zu warten
  2. Macht die Lösung weniger nervig (scrollen durch unzählige unnötige Dateien) und weniger langsam
  3. Das Entwicklungsteam ist damit einverstanden, es als lokale Codierungspraxis zu verwenden

Ein wirklich gutes Beispiel dafür, warum ich mehrere Klassen pro Datei haben möchte:

Angenommen, ich habe einige Dutzend benutzerdefinierte Ausnahmeklassen, von denen jede 4 Zeilen lang ist. Ich könnte für jede eine separate Datei haben oder die Ausnahmen gruppieren und pro Gruppe eine Datei haben. Für mich scheint der rationalste/pragmatischste Ansatz zu sein, sie zu gruppieren und nur wenige Dateien zu haben, weil es zeit- und kodierungstechnisch effizienter ist (ich muss nicht 50 Mal mit der rechten Maustaste klicken -> Klasse hinzufügen, umbenennen), es hält die Lösung übersichtlicher und besser performant.

182voto

Mark Punkte 9636

Eine Klasse pro Datei gibt Ihnen auch eine bessere Vorstellung davon, was jede Überprüfung ändert, ohne auf die Unterschiede der Datei zu schauen.

79voto

Jeremy Bell Punkte 5123
static bool GeneralregelSollteBefolgtWerden(IGeneralRule regel, IUseCase anwendungsfall)
{
    return (regel.Overhead(anwendungsfall) 
            < My.PersonalThresholds.KonformismusVsPraktikabilität);
}

50voto

Phil Rykoff Punkte 11691

Manchmal gruppiere ich mehr als eine Klasse in einer Datei, wenn sie eng miteinander verbunden sind und mindestens eine davon sehr klein ist.

Die allgemeine 'beste Praxis' ist es, pro Klasse eine Datei zu haben.

25voto

John K Punkte 27878

Jenseits hypothetischer Argumente und mit dem Fokus auf Windows .NET mit Visual Studio IDE und wachsenden Softwareprojekten, macht es in diesem Kontext einfach Sinn, eine Klasse pro Datei zu haben.


Allgemein gesprochen, für visuelle Referenzen schlägt nichts eine Klasse pro Datei. Wirklich.

Ich weiß nicht, ob Microsoft das macht oder nicht, jedoch haben sie das partial-Schlüsselwort erstellt, um eine Klasse über mehrere Dateien aufzuteilen (das ist sogar noch drastischer). Es wird oft benutzt, um den automatisch generierten Designer-Code von Ihrem benutzerdefinierten Code in derselben Klasse zu trennen (wird manchmal aber auch verwendet, um verschiedenen Entwicklern zu ermöglichen, gleichzeitig an der Klasse über verschiedene Dateien zu arbeiten). Also Microsoft erkennt die Vorteile von mehreren Dateien und jeder hat sicherlich Gedanken zur Organisation von Dateien im Kopf bei .NET.

Für geschachtelte Klassen haben Sie keine Wahl, außer eine Datei zu verwenden, oder zumindest die ersten Teile der Klassen in ihnen. Eine Datei ist in diesem Fall notwendig und in Ordnung:

class BicycleWheel {
    class WheelSpoke {
    }
}

Ansonsten, warum sollten Sie mehrere Klassen in einer Datei behalten? Das Argument "weil sie klein sind" oder miteinander verbunden sind überzeugt nicht wirklich, denn letztendlich werden Ihre Klassen mit anderen Klassen verbunden sein. Letztendlich können Sie die Dateiorganisation von Objekten basierend auf ihrer Verwendung nicht einfach ableiten, besonders wenn die Software weiter wächst.

Zusätzlich, wenn Sie Ordner für Namensräume verwenden, werden Sie niemals einen Kollision von Klassendateinamen haben. Es ist auch praktisch, eine Klasse durch den Dateinamen im Dateisystem zu finden, wenn Sie sich nicht in einer Entwicklungsumgebung wie Visual Studio befinden (z.B. wenn Sie schnell eine Klasse mit Notepad oder etwas Schnellem/beliebigem bearbeiten möchten).

So viele gute Gründe...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X