BMPortfolio
Back to blog

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.

25 min read25 views
Cover for Loose Coupling Nedir? C# ile Örnek Anlatım

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.