Das Beispiel, das Sie gegeben haben, ist meiner Meinung nach in Ordnung. Sie deklarieren innere Klassen , daher ist es durchaus sinnvoll, sie in derselben Datei zu belassen . Der einzige Weg, dies zu umgehen, wäre, Ihre Items
Klasse zu einer Teilklasse zu machen und sie auf mehrere Dateien aufzuteilen. Ich würde diese schlechte Praxis in Betracht ziehen. Meine allgemeine Richtlinie für verschachtelte Klassen lautet, dass sie klein und privat sein sollten. Hiervon gibt es zwei Ausnahmen:
- Sie entwerfen einen Klassencluster (häufiger in Objective-c), daher kann es sinnvoll sein, den partiellen Klassenansatz zu verwenden
- Sie benötigen eine Aufzählung, die nur mit der öffentlichen API der übergeordneten Klasse verwendet wird. In diesem Fall ist es mir lieber, eine öffentliche Enumeration in der übergeordneten Klasse zu deklarieren, als meinen Namespace zu verschmutzen. Die Aufzählung als "innere Aufzählung" führt effektiv dazu, dass ihr ein genau definierter Geltungsbereich zugewiesen wird.
Wenn Sie die Frage etwas anders formulieren und fragen, ob jede Namespace- Klasse in einer eigenen Datei abgelegt werden soll, lautet die Antwort "Ja".
Bei der Gestaltung des Unterrichts respektieren wir das Prinzip der Einzelverantwortung. Das Lesen von Code wird viel einfacher, wenn seine Form der Semantik folgt. Daher ist es sinnvoll, Dateien nach Klassen zu unterteilen.
Aus mechanischer Sicht hat eine Datei pro Klasse mehrere Vorteile. Sie können mehrere Klassen gleichzeitig in verschiedenen Fenstern öffnen. Dies ist besonders wichtig, da kein seriöser Entwickler mit weniger als zwei Bildschirmen arbeitet. Die Möglichkeit , mehr Kontext in hat vorne meinem Kopf zu haben, bedeutet, dass ich mehr Kontext in meinem Kopf behalten kann . (Mit den meisten IDEs können Sie dieselbe Datei zweimal öffnen, aber ich finde das umständlich.)
Der nächste wichtige Aspekt ist die Quellcodeverwaltung und das Zusammenführen. Indem Sie Ihre Klassen getrennt halten, vermeiden Sie viel Ärger, wenn Änderungen an derselben Datei vorgenommen werden, da separate Klassen geändert werden müssen.
Um ehrlich zu sein, fügen Sie einer Datei nicht mehr als eine Root-Klasse hinzu. Bei meinem letzten Job gab es Dateien mit nicht nur mehreren Klassen, sondern auch mehreren Namespaces, und dies erstreckte sich über mehrere tausend Codezeilen. Sehr schwer zu versuchen, zu folgen.
Wenn es Klassen gibt, die eng miteinander verwandt sind, benennen Sie die Dateien entweder ähnlich oder legen Sie sie in einem Unterordner ab.
Die physische Trennung von Klassendateien trägt zur Trennung von Bedenken und zu einer lockeren Kopplung bei (beachten Sie, dass nicht das Ende alles ist).
In Ihrem Beispiel wird jedoch nicht mehr als eine Stammklasse angezeigt. Es gibt mehrere verschachtelte Klassen (Anmerkung: Versuchen Sie, keine verschachtelten Klassen zu erstellen , außer
private
wenn Sie dies entwerfen können), und dies ist in einer Datei vollkommen in Ordnung .quelle
Wenn die Dateien einen hohen Zusammenhalt aufweisen, z. B. wenn es sich um eine Alternative zu mehreren sehr kurzen Dateien mit ähnlichen Namen handelt, kann dies eine gute Idee sein.
Zum Beispiel finde ich, dass es bei der Verwendung von Fluent NHibernate einfacher ist, wenn ich
Entity
und behalteEntityMap
in einer einzigen Datei, trotz allem , was meine Werkzeuge haben , darüber zu sagen.In den meisten Fällen ist es nur schwieriger, Klassen zu finden. Vorsichtig und sparsam verwenden.
quelle
Einfach gesagt, es ist keine gute Form, dies zu tun, und ich sage Ihnen, warum, etwas später, wenn Ihre Lösung groß wird, Sie vergessen, wo sich die Klassen befinden, da der Dateiname nicht mehr den Inhalt darstellt, wie der Dateiname lautet AnimalPersonObject.cs das ist einfach nicht machbar.
Sicher können Sie dies umgehen, indem Sie Funktionen in Tools wie resharper verwenden, um zu Typen zu springen, aber 1 Klasse pro Datei (einschließlich Schnittstellen) ist wirklich das Rückgrat jedes Codestandards, den ich je gesehen habe, nicht nur in .net, sondern in Java und c ++ und viele andere Sprachen, bei denen es nicht oft zu Wartungsproblemen kommt, und bei Junior-Entwicklern ist es schwierig, den Code zu verstehen.
Fast alle Tools zur Codeoptimierung schreiben vor, dass Sie die Klassen in eine separate Datei verschieben müssen. Für mich ist dies also ein Code-Geruch, für dessen Neutralisierung einige E-Mails erforderlich sind :)
quelle
Ein weiteres Problem ist, dass bei sehr großen und ähnlichen Klassen in derselben Datei - wenn Sie die Klassendeklaration nicht immer sehen können - Sie möglicherweise Haltepunkte in die falsche Klasse setzen und sich fragen, warum sie nicht getroffen werden ... grrr! :)
quelle
Wenn Sie diese Klasse nur innerhalb der "Eltern" -Klasse (in Bezug auf den Umfang) verwenden müssen, ist es normalerweise angebracht, sie als verschachtelte Klasse zu definieren.
quelle