Kural
Bir sınıf dosya dosya.
Birden fazla sınıf içinde bir tek dosyada yap kod
düzen belirsiz ve zorlaştırır navigasyon yönlendirilmesi.
Desteklenen diller: 45+Giriş
Birden fazla sınıfı tek bir dosyaya yerleştirmek, kod tabanında gezinirken belirli sınıfları bulmayı zorlaştırır. Arayan geliştiriciler Kullanıcı Deposu eğer şu adlı bir dosyanın içinde saklıysa, onu çabucak bulamazsınız database.js diğer beş sınıfla birlikte. Bu durum, “en az sürpriz” ilkesini ihlal eder ve ekip üyeleri sınıf tanımlarını aramakla zaman kaybettikleri için geliştirme sürecini yavaşlatır.
Neden önemli?
Kod bakım kolaylığı: Bir dosyada birden fazla sınıf bulunması, sorumluluklar arasında belirsiz sınırlar yaratır. Bir sınıfta değişiklik yapılması gerektiğinde, geliştiriciler konuyla ilgisi olmayan sınıfların da bulunduğu bir dosyayı açmak zorunda kalır; bu da bilişsel yükü artırır ve yanlışlıkla yanlış kodu değiştirme riskini yükseltir.
Gezinme ve bulunabilirlik: Birden fazla sınıfın aynı dosyayı paylaştığı durumlarda, IDE’ler ve metin editörleri doğru bir “tanıma git” işlevi sunmakta zorlanır. Geliştiriciler, ihtiyaç duydukları sınıfa doğrudan atlamak yerine dosyaların içinde arama yapmakla zaman harcarlar. Bu durum, yüzlerce sınıf içeren büyük kod tabanlarında daha da belirgin hale gelir.
Sürüm kontrolü çakışmaları: Birden fazla sınıf aynı dosyayı paylaştığında, farklı geliştiriciler tarafından farklı sınıflarda yapılan değişiklikler birleştirme çakışmalarına yol açar. Ayrı dosyalar, her geliştiricinin kendi dosyasında çalışması sayesinde koordinasyon yükü olmaksızın paralel geliştirmeye olanak tanır.
Kod örnekleri
❌ Uygun değil:
// 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 };
Neden yanlış: Adı olan tek bir dosyada bulunan birbiriyle ilişkisi olmayan üç depo sınıfı database.js. Arama Sipariş Deposu bunun içinde olduğunu bilmek gerekir database.js yerine OrderRepository.js. Dosyadaki değişiklikler birden fazla sınıfı etkiliyor ve bu da gereksiz birleştirme çakışmalarına yol açıyor.
✅ Uygunluk:
// 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;
Bunun önemi: Her sınıfın kendi dosyasında yer alması, gezinmeyi öngörülebilir hale getirir. IDE’ler doğrudan şuraya atlayabilir: OrderRepository.js sınıf aranırken. Bir depoda yapılan değişiklikler diğerlerini etkilemez; bu sayede gereksiz birleştirme çakışmaları ortadan kalkar.
Sonuç
Öngörülebilir gezinme için dosyaları, içerdikleri sınıfa göre adlandırın. Bu kural, belirli sınıfları hızlı bir şekilde bulmanın önemli olduğu büyük kod tabanlarında da geçerlidir. Ekstra dosyalar, sağladıkları düzen ve netlik açısından buna değer.

