Sollten Klassen, Aufzählungen und andere Entitäten in separaten Dateien abgelegt werden?

12

Der Teamleiter meines Unternehmens argumentiert, dass ein umfangreiches Projekt leichter zu verstehen ist, wenn "Entitäten, die durch Logik verbunden sind", in einer .cs-Datei abgelegt werden.

Ich zitiere:

  • "Die gesamte Struktur der Logik, der Schnittstelle und der Klasse ist an einer Stelle zu sehen. Dies ist ein Argument, das nicht zu widerlegen ist. Um dasselbe zu sehen, müssen Sie mit einer Reihe von Dateien die Tools class verwenden Diagramm, R # für Navigation usw. "

  • "Nach der schlechten Theorie könnte ich schreien, dass eine Armee von getrennten Dateien cool ist, aber wenn es darum geht, Änderungen am vorhandenen Code vorzunehmen, insbesondere wenn Sie kein Schreiber dieses Codes sind, ist es sehr schwierig, viele verstreute Dateien zu verstehen. In Foren können Sie also "eine Aufzählung - eine Datei" schreiben, aber in der Praxis sollte dieser Ansatz niemals verwendet werden.

  • "... Was die Trennung der Codebasis zwischen Entwicklern betrifft, ist es heutzutage kein Problem, dieselbe Datei gleichzeitig zu bearbeiten. Die Zusammenführung ist kein Problem."

Ich habe oft gehört und gelesen, dass wir eine .cs-Datei pro Enum, Klasse usw. erstellen müssen, und dies ist die beste Vorgehensweise.

Aber ich kann ihn nicht überzeugen. Er sagt, dass er keinem bekannten Programmierer wie Jon Skeet vertraut. Übrigens ist hier die Meinung von Skeet zu diesem Thema: Wo ist der beste Ort, um Aufzählungstypen zu finden?

Was denkst du? Gibt es ein echtes Problem? Oder ist es Geschmackssache und sollte durch den Kodierungsstandard der Organisation geregelt werden?

EngineerSpock
quelle
Sie können nicht alle gewinnen, auch wenn Sie die Skeet-Karte spielen.
JeffO
6
Um ehrlich zu sein, Jon Skeets Anspruch auf Ruhm besteht nicht darin, ein ausgezeichneter Code-Handwerker zu sein, sondern darin, dass er bereit und in der Lage ist, C # -Fragen schnell und genau zu beantworten (und das Buch buchstäblich geschrieben hat). Und vielleicht niemals schlafen, obwohl dies nur ein Gerücht ist. Seine Meinung dazu allein sollte nicht ausreichen, und sein Argument gibt es nicht. Das bedeutet nicht, dass er sich in diesem Fall irrt. Ich sage nur, dass Ihr Senior das Recht hat, zu sagen: "Kommen Sie mit Fakten und Gründen zu mir, nicht mit Meinungen."
pdr
2
Ich stimme für eine Klasse pro Datei, und alle Aufzählungen oder Schnittstellen, die nur für diese Klasse relevant sind, sollten sich in der Klasse befinden, nicht nur in der Datei. Auf der anderen Seite sollten Sie sich an den Kodierungsstandard des Unternehmens halten, egal wie unvernünftig er auch sein mag, denn das gehört dazu, guten Code für Ihren Job zu schreiben .
Bobson
2
Sie können darauf hinweisen, dass StyleCop als Visual Studio-Plugin Warnungen enthält, wenn> 1 Klasse pro Datei vorhanden ist
Kevin

Antworten:

20

Das Argument Ihres Teamleiters weist einige Mängel auf:

  1. Gut gestaltete Klassen und Aufzählungen sollen überall in Ihrem Projekt verwendet werden, nicht nur dort, wo sie logisch sinnvoll sind.

  2. Klassen und Aufzählungen, die ordnungsgemäß mit XML-Kommentaren dokumentiert sind, sind sehr selbsterklärend, indem Sie den Mauszeiger lediglich über das Element halten, auf das sie verweisen.

  3. Sie können jederzeit zu einer Klassen- oder Aufzählungsdefinition gelangen, indem Sie mit der rechten Maustaste auf die Referenz klicken und "Gehe zur Definition" auswählen. Es sollte also wirklich keine Rolle spielen, wo Sie sie ablegen.

  4. Das "logische" Zusammensetzen von Objekten ist willkürlich (dh Sie müssen sich überlegen, was "logisch" bedeutet. Ich würde diese Taktzyklen lieber für die eigentliche Programmierung verwenden).

Das Einrichten jeder Objektdefinition in einer eigenen Datei schafft eine einheitliche, disziplinierte Erwartung an Organisation und Struktur und wirft keine Fragen wie "Warum ist das hier?" Auf. Das ist eine sehr schöne Sache.

Wenn zwei oder mehr Objekte miteinander verknüpft sind, legen Sie sie einfach im Projektexplorer in einem eigenen Ordner ab.

Robert Harvey
quelle
5
Auf einer anderen Anmerkung, saugen Codezusammenführungen. Sicher, du kannst sie machen, aber warum, wenn du nicht musst?
Robert Harvey
4

Höchstwahrscheinlich hat sich der Teamleiter in früheren Zeiten die Zähne geschnitten, als das Klicken mit der rechten Maustaste und die Auswahl von "Zur Definition gehen" keine Option waren. Ich weiß, wenn ich mich im Entwicklungsmodus mit starken Spitzen befinde, werde ich ziemlich große Klassendateien erstellen, bis ich es von Resharper reparieren lasse.

In jedem Fall sollten Sie ihn fragen, warum diese Klassen und Aufzählungen keine untergeordneten Klassen und Aufzählungen sind, wenn Sie das Team zu einer Aufgabe führen möchten - kein Grund, sie als unabhängige Entitäten zu deklarieren, wenn sie wirklich abhängige Entitäten sind. Dies könnte ihm helfen, die Fatwa ein wenig durchzudenken.

Wyatt Barnett
quelle