Photo by Matt Seymour on Unsplash

ANTI-PATTERNS

Circular dependency (Döngüsel Bağımlılık) Anti-Pattern Nedir?

Tasarladığımız veya geliştirdiğimiz Modüllerin, Sınıfların birbirine bağımlı olmasından bahsedeceğim.

Onur Dayıbaşı
Architectural Patterns
2 min readJan 20, 2024

--

İster bir sınıf, ister modül, ister paket, ister micro-servis olsun aşağıda çizeceğim görseller benzeri yapılar birbirlerine bağımlı ise bu yazılım geliştirmede bize büyük sıkıntılar çıkarır.

Bir uygulama geliştiriyorsunuz ve A → B , B→ A bağlı , bu modülleri nasıl oluşturacaksınız ?

Veya sağdaki örnekte A → B, B →C, C →A ‘yı kullanıyor, bu durumda modüllerin birbirlerine olan bağımlılıklarından dolayı oluşturulması sorun çıkarır.

Yazılımda olabildiğince modülleri birbirinden bağımsız bu tarz Circular dependency oluşturmayacak şekilde tasarlamanız gerekir fakat bazen öyle iş mantıkları olurki bu modüller veya micro-servislerin birbirini kullanması zorunlu hale gelir.

Bu durumda modülü daha fazla parçaya bölüm bu bağımlılıkları ortadan kaldırabilirsiniz. Veya önce hangisi oluşturulacak sorununu, Dependency Inversion ve Dependency Injection kavramlarını kullanarak çözebilirsiniz

Adım 1 olarak gerçek gerçekleştirim sınıflarını kullanmak yerine A-Interface ve B-Interface oluşturuyoruz. Bu Interface Common pakete koyabilirsiniz. Bu kısım çok önemli değil daha iyi anlaşılması için bağımlılıkları kaldırdığımı göstermek istedim.

Şimdi bir sorun var. Bu sınıflar nasıl nasıl oluşturulacak. Ve birbirlerine enjekte edilecekler ?

Burada A için boş contstructor olması ve B daha sonradan dependeny olarak ekleyebilmesi gerekiyor. Burada BInterface bağımlı olduğu için BImplementation oluşturulmasına gerek kalmadan A oluşturulabiliyor.

class A extends AInterface {
constructor A()
public setB(BInterface)
}

Aynı durum B içinde geçerli

class B extends BInterface{
constructor B()
public setA(AInterface)
}

Şimdi tüm bu yapıları sırası ile oluşturacak Spring Framework bakabilirsiniz

...
AImpl = new A()
BImpl = new B()
AImpl.set(BImpl)
BImpl.set(AImpl)

diyerek bu problemi aşabilirsiniz.

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--