Merhaba! Bugün sizlerle, NodeJS'de karşılaştığım bir sorun olan "Circular Dependency" (Dairesel Bağımlılık) hakkında deneyimlerimi paylaşacağım. Bu, başıma geldiğinde oldukça karmaşık bir durumdu, ama çözümü aslında basitti.
Circular Dependency Nedir?
Kısaca anlatmak gerekirse, NodeJS'de modüller birbirine bağlı olabilir. Ancak, bu bağlantılar bazen bir döngü oluşturabilir. Örneğin, iki modül birbirini çağırırsa, bu bir döngüsel bağa neden olur ve sonucunda yazdığınız servis veya modüller beklemediğiniz şekilde çalışmaya başlar.
Bu makale aslında bir problemden dolayı ortaya çıktı.
Başıma Gelen Olay
Not: Buradaki dosya ismi ve variable'lar tamamiyle örnek olup, projelerimin hepsinde ingilizce kullanmaktayım 😂
Bir e-ticaret uygulaması geliştiriyordum ve uygulamamda Ürün
ve Kategori
adında iki modülüm vardı. Ürün
modülü, Kategori
bilgilerine ihtiyaç duyuyordu ve bunun tersi de geçerliydi. Ancak, birbirlerine doğrudan bağlı oldukları için sorunlar baş gösterdi.
// ürün.js
const Kategori = require('./kategori');
class Ürün {
// Ürünle ilgili işlemler
}
module.exports = Ürün;
// kategori.js
const Ürün = require('./ürün');
class Kategori {
// Kategoriyle ilgili işlemler
}
module.exports = Kategori;
Bu durumda, ürün.js
kategori.js
'yi ve kategori.js
de ürün.js
'yi çağırıyor. Bu, NodeJS'de bir döngüsel bağımlılığa yol açıyor.
Sorunu Nasıl Çözdüm?
Bu sorunu çözmek için, ortak bir modül oluşturdum. Bu modül, hem Ürün
hem de Kategori
modüllerinin ihtiyaç duyduğu ortak özellikleri ve metodları içeriyordu.
// ortakModul.js
class OrtakModul {
// Ortak kullanılan metodlar ve özellikler
}
module.exports = OrtakModul;
const OrtakModul = require('./ortakModul');
Ancak bunu farketmek için bir paket olduğunu öğrendim. Sorunu çözmek için ilk adımım, bu döngüsel bağımlılığı tespit etmek oldu. İşte burada Madge kütüphanesi devreye girdi.
Madge Kullanımı ile Circular Dependency Çözümü
Madge
, NodeJS projelerinde döngüsel bağımlılıkları tespit etmeye yardımcı olan bir araçtır. Bu kütüphaneyi kullanarak, kodunuzdaki bağımlılık ağını görselleştirebilir ve döngüsel bağımlılıkları kolayca tespit edebilirsiniz.
Kurulum ve kullanımı oldukça basittir:
npm install -g madge
madge --circular ./
Bu komutlar, projenizdeki döngüsel bağımlılıkları tespit eder ve bildirir. Bu kütüphane sayesinde, hem Ürün
hem de Kategori
modülleri artık birbirlerine doğrudan bağlı değillerdi. Böylece, döngüsel bağımlılık sorununu çözmüş oldum.
Circular Dependency, başlangıçta fark edilmesi zor bir sorun olabilir, ancak anlaşıldığında ve doğru şekilde ele alındığında çözümü oldukça basittir. Modüller arasındaki ilişkileri iyi planlamak ve gerekirse yeniden yapılandırmak önemlidir. Bir sonraki yazımda görüşmek dileğiyle, bağımsız kalın! 😂