Gevşek Bağlılık (Loose Coupling) ve Dependency Injection Nedir?

Merhaba yazılım geliştiriciler!

Object-Oriented Programming (OOP) prensiplerine uygun bir şekilde esnek, anlaşılır ve sürdürülebilir kod yazmak istiyorsak, sınıflar arasındaki bağımlılıkları minimum düzeyde tutmamız gerekir. Loose Coupling (Gevşek Bağlılık) ilkesi tam da bu noktada devreye girer.

Sınıflar ve nesneler birbirine ne kadar bağlı olursa, yazılımda yapılacak değişiklikler o kadar zor ve zahmetli hale gelir. Bu nedenle, bağımlılıkları azaltarak daha esnek bir sistem tasarlamak gerekir. Bağımlılıklar her zaman geliştirmenin önünde bir engel olabilir.

Bağlılık (Coupling) Nedir?

Eğer bir sınıf içinde başka bir sınıf new anahtar kelimesiyle oluşturuluyorsa, o sınıf diğerine bağımlı hale gelir. Sıkı bağlılık (Tightly Coupled), kodun esnekliğini azaltarak yeni özelliklerin eklenmesini zorlaştırır.

Kod içerisinde farklı nesneler kullanılacaksa, bu nesnelerin birbirine doğrudan bağımlı olmaması gerekir. Bunun yerine dependency injection gibi teknikler kullanarak kodun esnekliğini artırabiliriz.

Loose Coupling Nasıl Sağlanır?

Dependency Injection (Bağımlılık Enjeksiyonu), bağımlılıkları azaltmak ve kodun daha modüler hale gelmesini sağlamak için kullanılan bir tekniktir. Bağımlılıklar iki şekilde enjekte edilir:

  1. Constructor Injection (Kurucu Yöntemiyle Enjeksiyon)
  2. Setter Injection (Setter Metoduyla Enjeksiyon)

Bu yazımızda, Constructor Injection örneğini ele alacağız.

 

Java’da Constructor Injection Örneği

Main class içerisinde Database Manager ile farklı veritabanlarına bağlantıyı sadece tek bir kodu değiştirerek sağlayabiliyoruz. Bunu, bir interface aracılığıyla yaparak kodun esnekliğini artırıyoruz.

Main Class

public class Main {
    public static void main(String[] args) {
        DatabaseManager databaseManager = new DatabaseManager(new Database_Mongo());
        databaseManager.connect();
    }
}

DatabaseManager Class

public class DatabaseManager {
    private IDatabase iDatabase;    public DatabaseManager(IDatabase iDatabase) {
        this.iDatabase = iDatabase;
    }
    
    public void connect() {
        iDatabase.connect();
    }
}

Bu yapı sayesinde, DatabaseManager sınıfı herhangi bir spesifik veritabanı teknolojisine bağlı kalmaz.

MySQL Bağlantısı

public class Database_Mysql implements IDatabase {
    public void connect() {
        // MySQL veritabanına bağlantı kodları
        System.out.println("MySQL veritabanı ile bağlantı kuruldu");
    }
}

MongoDB Bağlantısı

public class Database_Mongo implements IDatabase {
    @Override
    public void connect() {
        // MongoDB veritabanına bağlantı kodları
        System.out.println("MongoDB veritabanı ile bağlantı kuruldu");
    }
}

IDatabase Interface

public interface IDatabase {
    void connect();
}

Loose Coupling’un Avantajları

  • Bağımlılıklar azalır, kod daha modüler hale gelir.
  • Yeni bir veritabanı eklemek için var olan kodu değiştirmeye gerek kalmaz.
  • Test edilebilirlik artar.
  • Kod daha okunabilir ve anlaşılır olur.

Sonuç

Dependency Injection, nesnelerin birbirine olan bağımlılığını azaltarak yazılımı daha esnek hale getirir. Bu yöntemi kullanarak, farklı sistemlere entegre olabilen ve daha az hata üreten kodlar yazabiliriz.

Umarız bu yazı sizler için faydalı olmuştur. Bir sonraki yazımızda görüşmek üzere!

Beğendiysen bir çay ısmarlayabilirsin ☕

Bana çay ısmarla

Java ile ilgili yorumlar

Yorum Paylaş

EMail Zorunlu alanlar * *