Anzahl der Klassen in einem Namespace - Code-Geruch?

11

Ich habe eine C # -Bibliothek, die von mehreren ausführbaren Dateien verwendet wird. Es gibt nur ein paar Namespaces in der Bibliothek, und ich habe gerade bemerkt, dass einer der Namespaces einige Klassen enthält. Ich habe es aufgrund der Kategorisierung immer vermieden, zu viele Klassen in einem einzigen Namespace zu haben, und weil ich unbewusst denke, dass es "schöner" ist, eine tiefere Hierarchie von Namespaces zu haben.

Meine Frage ist: Betrachtet es jemand anderes als "Codegeruch", wenn ein Namespace viele Klassen hat - auch wenn die Klassen miteinander in Beziehung stehen? Würden Sie sich viel Mühe geben, um Nuancen in den Klassen zu finden, die eine Unterkategorisierung ermöglichen?

Tim Claason
quelle
8
Wenn die Klassen in den genannten Namespace Nr. Design ist von Natur aus subjektiv, daher ist es schwer zu sagen und eher eine Frage der Präferenz, wie Sie bereits festgestellt haben.
Chris
Laut Whatecer StyleCop ist dies das Gesetz. Ich wette, es wird nicht gefallen.
Job
2
Definieren Sie "ziemlich viele". 10? 100? 1000?
Eric King

Antworten:

7

Nicht unbedingt. Wenn alle Klassen tatsächlich zu der durch den Namespace definierten Kategorie gehören, ist dies in Ordnung.

Sie können sich die Klassen ansehen und über die Möglichkeit nachdenken, einige von ihnen zusammenzuführen. Es könnte durchaus sein, dass kleine Gruppen dieser Klassen die "Familien" -Funktionalität unterstützen, aber aus historischen Gründen separat implementiert wurden. Wenn nun genügend Zeit verstrichen ist, ist möglicherweise eine bessere Zusammensetzung möglich.


quelle
6

Sie sollten vermeiden, zu viele Namespaces zu haben, da dies die Verwendung und Navigation einer Bibliothek für den Programmierer erheblich erschwert. Bei vielen Namespaces kann es für den Designer außerdem zu einer Herausforderung werden, genaue Namen für jeden Namespace anzugeben und zu entscheiden, in welchen Namespace eine bestimmte Klasse gehören soll.

Der einfachste Weg besteht darin, alle Primärklassen in einem einzigen Namespace zusammenzufassen und alle erweiterten Szenarioklassen in Sub-Namespaces zu platzieren. Das .NET Framework tut dies die ganze Zeit finden Sie in der System.Collectionsund System.Collections.Specializedfür gute Beispiele für diese Praxis.

Mit nur einem oder zwei Namespaces der ersten Ebene wird die Navigation in Ihrem Code viel einfacher, da Ihre erweiterten oder spezialisierten Klassen so lange ausgeblendet sind, bis der Programmierer bereit ist, solche zu entdecken.

Ed James
quelle
3

Solange sie zusammengehören und sich aufeinander beziehen, ist es kein Problem, zu viele Klassen in einem Namespace zu haben.

Unabhängig davon , ob eine Klasse gehört in einem eigenen ist separater Namensraum ist eine Frage des persönlichen Geschmacks.

Was sieht natürlicher aus?

Parsers.XML.XmlParser.cs
Parsers.XmlParser.cs

Es hängt ganz davon ab, wie Sie Ihren Code sehen und aufrufen möchten.

Persönlich bevorzuge ich separate Namespaces nur, wenn ich weiß, dass mehr als eine Klasse dazu gehört.


quelle
0

Das ist in Ordnung. Der Hauptgrund für Namespaces besteht darin, Namenskollisionen zu vermeiden. Erst danach sollten wir über den logischen Umfang nachdenken, der eher eine Frage der persönlichen Wahl als der Regel ist. Natürlich sind einige vernünftige Regeln willkommen. Niemand möchte in einem Namespace durch 3k ~ 4k Klassen scrollen.

Ein gutes Beispiel ist die std - Namespace in der C ++ Standard Library , die Sie Ihre eigenen Algorithmen von den Standard trennen können.

Andrey Taptunov
quelle
-1. Namenskollision ist wichtig, aber auch die konzeptionelle Gruppierung von Klassen ist wichtig.
Umlcat