Tasarım Desenleri - Loose Coupling Prensibi (Esnek Bağ)

Loose Coupling bağımlılıkların azaltılması anlamına gelmektedir.Bağımlılıktan kastedilen ise bir sınıfın içinde başka bir sınıfı direk olarak kullanmaktır. Bir nesne diğer nesnenin ne kadar fazla detayını biliyorsa o nesneye o kadar bağımlı demektir. Mantığımız her zaman kullanılan sınıf değiştiğinde bağımlı sınıf bundan ne kadar etkileniyor bunu tespit etmek olmalıdır. Bağımlılıkların olması kaçınılmazdır fakat bunu kontrol etmek de elimizdedir.

Kumanda

Bağımlılığa klasik bir örnek vermek gerekirse ;
Burada kumanda nesnesi görevini yapabilmek için televizyon nesnesine ihtiyaç duymaktadır , bir diğer tabirle kumanda televizyona bağımlıdır.  Peki bize ne zararı var bu bağımlılığın ;

-        Tv olmazsa kumanda bir işe yaramaz.

-        Tv değiştiğinde kumanda bu değişimden direk etkilenir.

-        Kumanda sadece televizyonu kontrol edebilir başka aletleri kontrol edemez.

 

Kodsal Bağımlılık gösterimi aşağıdaki gibi olabilir. Kumanda sınıfının içerisinde Televizyon nesnesi direk kullanılmıştır. Yanlış!!!!

public class Kumanda

{

    Televizyon tv = new Televizyon();

 

    public void TelevizyonAc()

    {

        tv.Ac();

    }

}

 

public class Televizyon

{

    public void Ac()

    {

        Console.WriteLine("Televizyon Açıldı");

    }

}

Bu şekilde bir kullanım yerine bağımlılığı azaltmak adına araya bir interface koyulabilir ve artık daha esnek ve genişleyebilir bir yapı elde edebiliriz.Doğru!!!

public interface IKumanda

{

    void Ac();

}

 

public class Televizyon : IKumanda

{

    public void Ac()

    {

        Console.WriteLine("Televizyon Açıldı...");

    }

}

 

public class Radyo : IKumanda

{

    public void Ac()

    {

        Console.WriteLine("Radyo Açıldı...");

    }

}

 

public class Kumanda

{

    IKumanda _kmd;

    //Constructor da hangi tip aletin kumandası olduğu belirleniyor.

    public Kumanda(IKumanda kmd)

    {

        _kmd = kmd;

    }

    public void Ac()

    {

        _kmd.Ac();

    }

}

Artık kumandayı aşağıdaki şekide kullanabiliriz.

Kumanda k=new Kumanda(new Televizyon);

k.Ac();

Bu tasarımın bize faydası artık kumanda nesnesini istediğimiz bir nesneyi kontrol edebilecek hale getirdik. Daha sonra ihtiyaçlar değiştiğinde buzdolabı kontrol eden bir kumanda gerektiğinde yapmamız gereken tek şey yine IKumanda interface’inden kalıtım almış bir Buzdolabı sınıfı türetmek. Bu durumda Kumanda sınıfı hiçbir değişikliğe uğramadan buzdolabını da kontrol edebilecektir.

Kod geliştirirken aklımızda bulundurmamız gereken en temel tekniklerden bir tanesini loose couplin’i basit olarak öğrenmiş olduk umarım faydalı olmuştur.

Kaynaklar :
Design Patterns in C# (Software Patterns Series) addison wesley
Java Tasarım Desenleri – Özcan Acar
C# 3.0 Design Patterns



Yorum Yaz
Arkadaşların Burada !
Arkadaşların Burada !