Wenn ich sage, ich habe eher ein hierarchisches Entitätsframework als ein Komponentenmodell. So etwas wie:
(Ja, das ist erfunden)
Waffe-> Waffe-> Automatische Waffe-> MP44
Oder eher ein klassisches Beispiel:
Entität-> Bewegliche Entität-> Feind-> Gehender Feind
Wie weit würden Sie die Quell- / Header-Dateien für Lesbarkeit und Organisation aufteilen? Ist es am besten, etwas wie Entity.cpp, MovableEntity.cpp, Enemy.cpp usw. zu wählen, oder wäre ein Ansatz wie Entity.cpp [mit Entity und MovableEntity] und Enemy.cpp [mit Enemy und WalkingEnemy] besser? (Oder auf eine sprachunabhängigere Weise eine Enemy-Datei und eine Entity-Datei im Vergleich zu einer Datei für jede Klasse?)
Würde dies auch etwas anderes als Lesbarkeit und Organisation beeinflussen?
language-agnostic
es ein geeignetes Tag ist, da es stark von der Sprache abhängt, die Sie hinsichtlich der Nebenwirkungen verwenden.Antworten:
Dies ist völlig eine Frage der Präferenz. Ich persönlich glaube jedoch, dass es am besten ist, auf der Seite von mehr Dateien zu irren. Java erfordert eine Klasse pro Datei , wobei der Dateiname beispielsweise mit dem Klassennamen identisch ist. Sie tun dies nach Richtlinien, um diese bewährte Methode durchzusetzen (obwohl Sie Unterklassen haben können, die dies im Grunde umgehen).
Außerdem können Quellcodeverwaltungssysteme Änderungen in einer Datei ziemlich gut zusammenführen, aber es ist weniger problematisch, wenn Sie nur in völlig separaten Dateien arbeiten. Sie können auch leichter sehen, wer welche Klasse geändert hat. Angenommen, ein anderer Entwickler ändert die Datei AllEntities.h. Sie haben keine Ahnung, welche Entität (oder Entitäten) er geändert hat, bis Sie die Datei öffnen und die Diff-Ausgabe betrachten.
Es ist jedoch großartig, kleine Strukturen und Aufzählungen, die sich auf die Klasse beziehen, in der Datei einer Klasse zu gruppieren . Wenn Sie eine Aufzählung haben, die nur von einer einzelnen Klasse verwendet wird, warum sollten Sie sie dann in eine eigene Datei aufteilen? Setzen Sie sie einfach zusammen. Wenn es jedoch von einer anderen Klasse verwendet wird (dh ein anderes Klassenmitglied ist vom Typ dieser Aufzählung), ist es an der Zeit, ihm eine eigene Datei zu geben.
quelle
Viele Sprachen außerhalb von C / C ++ legen Einschränkungen für Dateien fest. Ricket erwähnte Javas 'eine Klasse pro Datei'; Python verwendet Dateien als Namespaces. andere Sprachen kopieren oft den Geist dieser.
Wenn Sie C oder C ++ verwenden, bedeuten mehr enthaltene Dateien im Allgemeinen längere Kompilierungszeiten pro Datei. Andererseits bedeutet weniger mehr Kompilierung, wenn kleine Änderungen vorgenommen werden. Da Aufzählungen in C nicht vorwärts deklariert werden können, sollten Sie sie aus Gründen der Abhängigkeit immer in Header-Dateien ablegen, die nur andere Aufzählungen enthalten.
Ansonsten ist Javas "eine Datei pro Klasse" vernünftig, aber Java unterstützt seit langem innere Klassen - wie einen Container und eine innere Klasse seines Iterators. In ähnlicher Weise möchten Sie in jeder anderen Sprache wahrscheinlich einen dominanten Datensatz / Struktur / Klasse / Typ / Schnittstelle / Blorb pro Header, können aber auch verwandte Helfer oder Container einbeziehen.
(Sie müssen kein Komponentenmodell verwenden, aber wenn Sie eine solche tiefe und spezifische Klassenhierarchie haben, werden Sie sich später selbst hassen.)
quelle