Regel
Eine Klasse pro Datei.
Mehrere Klassen in a einzelnen Datei machen Code
Organisation unübersichtlich und schwieriger zu navigieren.
Unterstützte Sprachen: 45+Einführung
Wenn mehrere Klassen in einer einzigen Datei zusammengefasst werden, ist es schwierig, bestimmte Klassen zu finden, wenn man in einer Codebasis navigiert. Entwickler, die nach UserRepository wird es nicht schnell finden, wenn es in einer Datei namens datenbank.js neben fünf anderen Klassen. Dies verstößt gegen das Prinzip der geringsten Überraschung und verlangsamt die Entwicklung, da die Teammitglieder Zeit mit der Suche nach Klassendefinitionen verschwenden.
Warum das wichtig ist
Wartbarkeit des Codes: Mehrere Klassen pro Datei schaffen unklare Grenzen zwischen den Zuständigkeiten. Wenn eine Klasse geändert werden muss, müssen die Entwickler eine Datei mit nicht verwandten Klassen öffnen, was die kognitive Belastung erhöht und das Risiko erhöht, versehentlich den falschen Code zu ändern.
Navigation und Auffindbarkeit: IDEs und Texteditoren haben Schwierigkeiten, eine genaue "Go-to-Definition" zu liefern, wenn mehrere Klassen eine Datei gemeinsam nutzen. Die Entwickler verbringen viel Zeit mit der Suche in den Dateien, anstatt direkt zu der benötigten Klasse zu springen. Dies wird bei großen Codebasen mit Hunderten von Klassen noch verstärkt.
Konflikte bei der Versionskontrolle: Wenn sich mehrere Klassen eine Datei teilen, führen Änderungen an verschiedenen Klassen durch verschiedene Entwickler zu Konflikten bei der Zusammenführung. Separate Dateien ermöglichen eine parallele Entwicklung ohne Koordinationsaufwand, da jeder Entwickler in seiner eigenen Datei arbeitet.
Code-Beispiele
❌ Nicht konform:
// database.js
class UserRepository {
async findById(id) {
return db.users.findOne({ id });
}
}
class OrderRepository {
async findByUser(userId) {
return db.orders.find({ userId });
}
}
class ProductRepository {
async findInStock() {
return db.products.find({ stock: { $gt: 0 } });
}
}
module.exports = { UserRepository, OrderRepository, ProductRepository };
Warum das falsch ist: Drei voneinander unabhängige Repository-Klassen in einer Datei mit dem Namen datenbank.js. Auf der Suche nach OrderRepository erfordert das Wissen, dass es in datenbank.js statt OrderRepository.js. Datei-Änderungen betreffen mehrere Klassen und führen zu unnötigen Konflikten beim Zusammenführen.
✅ Konform:
// UserRepository.js
class UserRepository {
async findById(id) {
return db.users.findOne({ id });
}
}
module.exports = UserRepository;
// OrderRepository.js
class OrderRepository {
async findByUser(userId) {
return db.orders.find({ userId });
}
}
module.exports = OrderRepository;
// ProductRepository.js
class ProductRepository {
async findInStock() {
return db.products.find({ stock: { $gt: 0 } });
}
}
module.exports = ProductRepository;
Warum das wichtig ist: Jede Klasse in ihrer eigenen Datei macht die Navigation vorhersehbar. IDEs können direkt springen zu OrderRepository.js bei der Suche nach der Klasse. Änderungen an einem Repository wirken sich nicht auf andere aus, wodurch unnötige Merge-Konflikte vermieden werden.
Schlussfolgerung
Benennen Sie Dateien nach der Klasse, die sie enthalten, um eine vorhersehbare Navigation zu ermöglichen. Diese Konvention eignet sich für große Codebasen, in denen es wichtig ist, bestimmte Klassen schnell zu finden. Die zusätzlichen Dateien sind die organisatorische Klarheit wert, die sie bieten.
.avif)
