Kodlama İpuçları

SOLID: Dependency Inversion Principle (DIP)

Dependency Inversion Principle (DIP), SOLID prensiplerinin beşincisidir. Üst seviye modüllerin, alt seviye modüllere bağımlı olmaması gerektiğini belirtir. Bunun yerine, her iki modül de soyutlamalara (abstract sınıflar veya arayüzler) bağımlı olmalıdır.

Önemi

DIP, kodun esnekliğini ve yeniden kullanılabilirliğini artırır. Üst seviye modüllerin, alt seviye modüllere doğrudan bağımlı olmaması, sistemde değişiklik yapmayı kolaylaştırır ve kodun daha sürdürülebilir olmasını sağlar.

İyi Uygulamalar

  • Abstraction Kullanımı: Soyutlamalar, bağımlılıkları azaltmak ve modüller arasındaki bağlantıları esnek hale getirmek için kullanılmalıdır.
  • Dependency Injection: Bağımlılıklar, dışarıdan enjekte edilerek kontrol altına alınmalıdır.
  • Arayüz ve Soyut Sınıflar: Üst seviye modüller, alt seviye modüller yerine arayüzlere veya soyut sınıflara bağımlı olmalıdır.

Örnek

// Kötü Örnek
public class Light
{
    public void TurnOn() { }
    public void TurnOff() { }
}

public class Switch
{
    private Light _light;

    public Switch()
    {
        _light = new Light();
    }

    public void Operate()
    {
        _light.TurnOn();
    }
}

// İyi Örnek
public interface ISwitchable
{
    void TurnOn();
    void TurnOff();
}

public class Light : ISwitchable
{
    public void TurnOn() { }
    public void TurnOff() { }
}

public class Switch
{
    private ISwitchable _device;

    public Switch(ISwitchable device)
    {
        _device = device;
    }

    public void Operate()
    {
        _device.TurnOn();
    }
}

Clean Code kitabında, Robert C. Martin, DIP‘nin önemini şu şekilde açıklar: “Üst seviye modüller, düşük seviye modüllere değil, soyutlamalara bağımlı olmalıdır.” Martin, bu prensibin uygulanmasının yazılımda nasıl esneklik ve sürdürülebilirlik sağladığını örneklerle açıklar. DIP, modüllerin birbirinden bağımsız çalışmasını sağlar ve kodun daha esnek olmasına yardımcı olur. Bağımlılık enjeksiyonu, DIP’yi uygulamanın etkili bir yoludur ve kodun test edilebilirliğini artırır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir