Welche Namenskonvention für C # -Dateien, die mehrere Klassen enthalten?

20

In C # -Projekten gruppieren wir häufig kleine und eng verwandte Klassen in derselben .csDatei. Diese Vorgehensweise verringert die Reibung beim Umgang mit einer Vielzahl von Dateien, die nahezu keinen eigentlichen Code enthalten. Gibt es jedoch eine bewährte Methode, um die Datei zu benennen , die mehrere Klassen enthält?

Joannes Vermorel
quelle
13
Ehrlich
Sie können es nach der Gruppe benennen, unter die diese eng verwandten Klassen fallen.
V4Vendetta,
Vielleicht sind diese Klassen zu klein? Persönlich gruppiere ich nur mehrere Aufzählungen in einer Datei (manchmal mit der Klasse, manchmal alle Aufzählungen zusammen, je nach Kontext).
Konrad Morawski
@ Felice: siehe MSpec :)
Bryan Boettcher

Antworten:

18

Mein Rat: Vermeiden Sie Dateien mit mehreren Klassen und Namensdateien == Klassen, auch wenn Sie meinen, dass es zu viele Dateien gibt. Versuchen Sie, sie in Ordnern zu organisieren. In ganz besonderen Fällen haben Sie möglicherweise verschachtelte Klassen. In diesem Fall ist es sinnvoll, die Hauptklasse und eine verschachtelte Klasse in verschiedene Dateien mit einer Teilklasse zu unterteilen. In diesem Fall verwende ich folgende Namenskonvention.

MyEnumerable.cs
MyEnumerable.MyEnumerator.cs

Wahrscheinlich können Sie in Ihrem Fall auch mehrteilige Dateinamen verwenden.

George Mamaladze
quelle
4
Noch eine Idee. Sie können mehrere CS-Dateien in Visual Studio Project so gruppieren, dass sie alle unter demselben Knoten in der Baumstruktur angezeigt werden (z. B. Designer.cs-Dateien). Dies signalisiert Ihnen, dass die Klassen eng zusammengehören.
4

Wenn Sie sich die Frage stellen, wie solche Dateien benannt werden sollen, haben Sie bereits einen für Sie problematischen Codegeruch identifiziert, der sich nicht so leicht beheben lässt.

Unabhängig von den Überlegungen werden Sie feststellen, dass es schwierig ist, sinnvolle Namen zu wählen, wenn Sie mehr als eine Klasse in einer Datei haben passt nicht ganz zu dem Gruppennamen, den Sie einer Gruppe von Klassen zuweisen.

Die kurze Antwort lautet daher, dass es keinen anerkannten oder etablierten Standard für die Benennung dieser Art von Dateien gibt. Mein Vorschlag wäre, sich mit Ihrem Team zusammenzusetzen und sich um die Organisation Ihres Codes zu kümmern und ein wenig umzugestalten, um die Dinge ein wenig aufzuräumen.

Um den Einstieg zu erleichtern, würde ich jedoch fragen, ob die zusätzlichen Klassen verschachtelt oder unabhängig sind. Wenn sie unabhängig sind, können diese Klassen einfacher in ihre eigenen Dateien aufgeteilt werden, wobei jede Datei nach der darin enthaltenen einzelnen Klasse benannt wird. Wenn verschachtelt, müssen möglicherweise weitere Entscheidungen darüber getroffen werden, wie solche Klassen organisiert werden sollen. Die verschachtelten Klassen müssen jedoch möglicherweise nicht sofort entfernt werden, und die Dateien werden daher nach der äußersten Klasse benannt. Was die Verschachtelung betrifft, gibt es viele Argumente dagegen und einige vernünftige, die unter bestimmten Umständen für die Verschachtelung sprechen. Mein Rat wäre, zu fragen, ob ein vernünftiger Namespace und die Schaffung einer besser organisierten Quellcodestruktur eine bessere Lösung darstellen das Problem.

In der Realität werden Sie jedoch feststellen, dass Sie sich am Ende der Lebensdauer Ihres Projekts gewünscht haben, dass Ihre Dateien nur eine einzige Klasse und eine passende Verzeichnis- / Namespace-Struktur enthalten.

Prost,

S.Robins
quelle
3

Früher war es alles, um mehrere Klassen in einer Datei zu haben, aber seitdem ich als Programmierer gearbeitet habe (anstatt alleine zu sein), habe ich festgestellt, dass es ein Wartungs-Albtraum mit vielen Klassen in einer einzigen Datei sein kann. Zugegebenermaßen kann Visual Studio durch die Verwendung von F12 eine Menge helfen (siehe Definition).

Ich habe damit begonnen, eine Namenskonvention wie folgt zu verwenden: namespace.klassenname.cs Auf diese Weise weiß ich genau, was sich in jeder Datei befindet, und es wird auch eine Art Gesamtkontext der Datei bereitgestellt. Wenn sich die Klasse im Standardnamespace befindet, verwende ich einfach die Datei classname.cs (ähnlich wie in Java).

Jetti
quelle