Yazılım Prensipleri
Loose Coupling Nedir? C# ile Örnek Anlatım
Loose coupling ve tight coupling kavramları nelerdir? Bu yazıda sınıflar arasındaki sıkı bağlılığın oluşturduğu sorunları ve loose coupling yaklaşımının C# ile nasıl uygulanabileceğini basit örnekler üzerinden inceliyoruz.

Loose Coupling Nedir?
Loose coupling, yazılım sistemindeki parçaların birbirine
mümkün olduğunca az bağımlı olmasıdır. Yani loose coupling'de amaç: bir bölüm
değiştirildiğinde diğer bölümler mümkün olduğunca az etkilenmesi lazım.
Loose Coupling'e Örnek: Diyelim ki bir şarj aletimiz var. eğer ki bu şarj
aletini tek bir prize göre yaparsak burada çok sıkı bir bağımlılık olur. ama
şarj aletini bütün prizlere göre evrendeki bütün prizlere göre yaparsak burada
loose coupling yani esnek bağımlılık vardır
Aslında OOP tasarımlarında nesneler arasındaki
bağımlılıkları 100% kaldırmak mümkün değildir. Her halükarda bağımlılık
olacaktır. Bizim buradaki amacımız bağımlılıkları mümkün mertebede en aza
indirmek ve bu bağımlılıkları yönetebilir hale gelmek olacaktır
Loose Coupling Olmazsa Ne Olur? (Tight Coupling)
Loose Coupling kullanılmayan sınıflar
arasında Tight Coupling yani sıkı bağımlılık oluşur.
Bu durumda bu sınıfta bir değişiklik yaptığımızda, bu sınıfa bağımlı olan bütün
sınıfları etkiler ve hepsinde tek tek değişiklik yapmamız gerekir. Bu durum
maliyeti çok fazla arttırır.
Şimdi bunu kodlarla görelim:
Kullanımı:
Bu örnekte ürün servisi
sınıfımız MySqlVeriTabanı sınıfımıza bağımlı. Projenin ilerleyen
zamanlarında MySQL yerine MongoDB kullanmaya karar verdiğimizi düşünelim:
ürün servisi sadece MySql sınıfına bağımlı olduğu için yeni
sınıfı yani mongodb sınıfını yazmamız yeterli olmaz. Ürün servisi sınıfını da
değiştirmemiz gerekir
Yani ben ileride MongoDb veritabanı kullanırsam burada ürün
servisi sınıfımı da değiştirmem gerekiyor. İşte buna Tight coupling denir. Eğer
loose coupling prensibine uygun yapsaydık ürün servisine hiç ellemezdik direkt
gider mongodb yi eklerdik. Bunun için de Loose Coupling prensibini uygulamamız
gerekiyor
Loose Coupling Nasıl Uygulanır?
Kodumuzu loose coupling’e uygun hale getirmek için
UrunServisi sınıfını doğrudan MySQL’e değil, IVeritabani interface’ine bağımlı
yaparız.
MySQL Sınıfı
MongoDB sınıfı
Ürün Servisi Sınıfı
Yani ürün servisi sınıfım artık MySqlVeritabani ve
MongoDbVeritabanı sınıflarını bilmiyor. Sadece IVeritabani interface’inde
bulunan kaydet methodunu biliyor.
MySQL ile kullanımı
Sonradan MongoDb ye geçiş yapmak istediğimizde, ürün servisi
sınıfına dokunmayız. Sadece uygulamanın başlangıç noktasındaki verdiğimiz
nesneyi değiştiririz
MongoDb ye Geçmek İstediğimizde
Sonuç
Loose coupling sayesinde sınıflarımızı belirli bir uygulamaya değil, ortak bir soyutlamaya bağımlı hâle getirdik. Böylece MySQL yerine MongoDB kullanmak istediğimizde UrunServisi sınıfını değiştirmemize gerek kalmadı. Yalnızca yeni veritabanı sınıfını IVeritabani interface’ine uygun şekilde oluşturduk ve uygulamanın başlangıç noktasında kullanılacak nesneyi değiştirdik.
Loose coupling, bağımlılıkları tamamen ortadan kaldırmaz. Bunun yerine bağımlılıkların daha kolay yönetilmesini sağlar. Böylece kodumuz değişikliklere daha açık, test edilmesi daha kolay ve bakımı daha rahat bir yapıya kavuşur. Proje büyüdükçe loose coupling’in sağladığı bu esneklik daha da önemli hâle gelir.