Makale Özeti

Design patterns (Tasarım Desenleri) hakkında uygulamalı bir giriş örneği.

Makale

Merhabalar, design patterns hakkında sitede açıklayıcı bir makale var olduğundan dolayı ben design patterns ın neler olduğu kısmını atlayarak direk konuya gireceğim. Ama yine de çok kısa bir giriş olması açısından şöyle özetleyebiliriz : Siz bugün projenizde bir yere takıldınız ve saatlerce aynı noktada takılıp kaldınız. Hatta bu problemi çözdünüz ama beğenmediniz (performansını beğenmeyip daha iyi bir çözüm aradınız) derken bir baktınız ki en optimum çözüme ulaşmışsınız. Tabi burada kastettiğimiz çözüm tasarım çözümü, algoritmik bir çözüm değil. Siz ve sizin gibi uğraşmış, didinmiş kişiler de deneyimlerini bir havuzda toplayıp birleştirince design patterns (best practices) ortaya çıkıyor. Hepimiz biliyoruz ki yazılım dünyasında bir problemin birden çok çözüm yolu vardır, design patterns bize bu yolların en pratik, en kestirme ya da en optimumunu öneriyor. Çok kaba bir şekilde olayın amacını anlatabildim sanırım. Şimdi detaylara girmeye başlayalım.

Gang of Four bu design patternleri 3 ana başlığa ayırmış.

  • Creational (Yaratımsal)
  • Structural (Yapısal)
  • Behavioral (Davranışsal)

    Kolları sıvayıp Creational Design Patterns ile başlayalım örneklerimize. Creational Design Patterns Creational pattern ların hepsi, objelerin örneklerini (object instance) türetmekle ilgilidirler. Bildiğiniz gibi C# da, yeni bir obje yaratırken “new” anahtar sözcüğünü (key word) kullanıyoruz.

    Suleyman slymn = new Suleyman();

    diyerek “Suleyman” sınıfından türeyen yeni bir sınıf olan “slymn” objesini yarattık.

    a)Simple Factory Pattern (Basit Fabrika Deseni)
    Object oriented (nesneye dayalı) programlamada karşımıza çok sıkan örneklerden biri de Simple Factory Pattern dir. Simple Factory Patterni, kendisine verilen parametrelere göre, elindeki olası birkaç sınıftan birini türetip geri gönderir. Genel olarak, geri döndürdüğü bütün sınıflar, ortak bir sınıftan türemişlerdir ve hepsinin spesifik görev ve özellikleri vardır.

    Class diyagramdan daha da net anlaşılacağı üzere, A sınıfı burada base (temel ) sınıfımız ve A1 ve A2 sınıfları da A dan türeyen sınıflardır. A_Fabrikasi sınıfı, kendisine gelen parametrelere bakarak, bu alt sınıflardan hangisinin geri döndüreleceğine karar verir.

    //temel sınıfımız...
    public class selecter
    {
    protected string soyisim, isim;
    public string ismiGetir() { return isim; }
    public string soyismiGetir() { return soyisim; }
    }

    Burada temel sınıfımızın yapıcı metodu (constructor) olmadığına dikkatinizi çekerim.

    Aşağıda temel sınıftan türeyen selecter1 ve selecter2 sınıflarını görüyorsunuz.

    public class selecter1:selecter
    {
    public selecter1 (string uzunisim)
    {
    int x = uzunisim.IndexOf(" ");
    if (x > 0)
    {
    isim = uzunisim.Substring(0, x).Trim();
    soyisim = uzunisim.Substring(x + 1).Trim();
    }
    else
    {
    soyisim = uzunisim; isim = "";
    }
    }
    }

    public class selecter2 : selecter
    {
    public selecter2(string uzunisim)
    {
    int x = uzunisim.IndexOf(",");
    if (x > 0)
    {
    soyisim = uzunisim.Substring(0, x).Trim();
    isim = uzunisim.Substring(x + 1).Trim();
    }
    else
    {
    soyisim = uzunisim; isim = "";
    }
    }
    }

    Ve son olarak da A_Fabrikasi diyagramının işini gören kod bloğu da aşağıdaki gibi olacak.

    public class isimfabrikasi
    {
    public isimfabrikasi() { }
    public static selecter isimGetir(string uzunisim)
    {
    int y = uzunisim.IndexOf(" ");
    if (y > 0) return new selecter1(uzunisim);
    else return new selecter2(uzunisim);
    }
    }

    Hemen hızlıca bir windows form uygulamasında bunu test edelim şimdi. Benim formum şöyle birşey oldu.



    Butonun click olayında çalışan kod parçası ise şöyle :

    private void btnGet_Click(object sender, EventArgs e)
    {
    selecter s = isimfabrikasi.isimGetir(txtUzunIsim.Text.Trim());
    txtIsim.Text = s.ismiGetir();
    txtSoyIsim.Text = s.soyismiGetir();
    }



    Bu kadar basit ! Bu makalede Factory Patternlerine bir giriş yapmış olduk. Diğer makalelerde görüşmek üzere.