Regel
Eine Klasse pro Datei.
Mehrere Klassen in a einzelnen Datei machen Code
Organisation unübersichtlich und schwieriger zu navigieren.
Unterstützte Sprachen: 45+Einleitung
Das Ablegen mehrerer Klassen in einer einzigen Datei erschwert das Auffinden spezifischer Klassen beim Navigieren durch eine Codebasis. Entwickelnde, die nach UserRepository findet es nicht schnell, wenn es in einer Datei namens vergraben ist database.js neben fünf anderen Klassen. Dies verstößt gegen das Prinzip der geringsten Überraschung und verlangsamt die Entwicklung, da Teammitglieder Zeit mit der Suche nach Klassendefinitionen verschwenden.
Warum es wichtig ist
Code-Wartbarkeit: Mehrere Klassen pro Datei schaffen unklare Grenzen zwischen Verantwortlichkeiten. Wenn eine Klasse geändert werden muss, müssen Entwickelnde eine Datei öffnen, die nicht verwandte Klassen enthält, was die kognitive Belastung und das Risiko erhöht, versehentlich falschen Code zu ändern.
Navigation und Auffindbarkeit: IDEs und Texteditoren haben Schwierigkeiten, eine präzise „Gehe zu Definition“-Funktion bereitzustellen, wenn mehrere Klassen eine Datei teilen. Entwickelnde verbringen Zeit mit der Suche innerhalb von Dateien, anstatt direkt zu der benötigten Klasse zu springen. Dies verstärkt sich in großen Codebasen mit Hunderten von Klassen.
Versionskontrollkonflikte: Wenn mehrere Klassen eine Datei teilen, führen Änderungen an verschiedenen Klassen durch unterschiedliche Entwickelnde zu Merge-Konflikten. Separate Dateien ermöglichen parallele Entwicklung ohne Koordinationsaufwand, da jede*r Entwickelnde in der 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 es falsch ist: Drei unabhängige Repository-Klassen in einer Datei namens database.js. Suche nach OrderRepository erfordert das Wissen, dass es sich in... database.js anstatt OrderRepository.js. Dateiänderungen betreffen mehrere Klassen, was zu unnötigen Merge-Konflikten führt.
✅ 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 dies wichtig ist: Jede Klasse in einer 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 eliminiert werden.
Fazit
Benennen Sie Dateien nach der Klasse, die sie enthalten, für eine vorhersehbare Navigation. Diese Konvention skaliert gut für große Codebasen, bei denen das schnelle Auffinden spezifischer Klassen wichtig ist. Die zusätzlichen Dateien sind die organisatorische Klarheit wert, die sie bieten.
.avif)
