SOLID Prensipleri : 03 Liskov Substitution Principle

By Burak Tungut - 15.6.2016 - 5 Yorum - Kategori Design / Architectural Patterns

Selamlar herkese,

Son 1 haftadır bazı çalışma arkadaşlarımın "Yazmaya neden ara verdin?" tepkilerine daha fazla dayanamıyor ve bu yazımızda SOLID prensiplerinden Liskov Substitution - Liskov'un Yerine Geçme prensibini inceliyor olacağız. Yazmam için sürekli beni dürten sevgili çalışma arkadaşım Barış BIYIK'a teşekkürlerimi buradan da iletmek isterim :)

Liskov Substitution aslında Prof. Barbara Liskov ismindeki bir bilim insanının tasarladığı bir prensip.
Prensip bize der ki ;

"Aynı base sınıftan üretilen tüm alt sınıflar, birbirlerinin yerine kullanılabilir olmalıdır. Alt sınıflara özel bir istisnai durum kesinlikle oluşmamalıdır."

Bazen abstract class'lar ile interface'ler arasındaki farkın ne olduğuna dair sorularda alıyor olabilirsiniz. Aslınd bu prensibin amacı bu iki tip abstraction yapmamızı sağlayan tip arasındaki en büyük farkı göstermekte. Birazdan yapacağımız örnek ile bunu çok daha iyi anlıyor olacağız.

 

Liskov Substitution Principle

 

Küçük Bir Senaryo İle Liskov Substitution Principle

Farz edelimki ürünlerin ve ürünler üzerinde çeşitli business'ları işletebilecek üyelik tiplerinin olduğu bir proje geliştiriyoruz. Çok minimal bir ürün tipi tasarlayalım. Ben aşağıdaki gibi bir şeyler tasarladım;

public class Product
{
    public string Name { get; set; }
    public decimal Price { get; set; }
    public List<string> Features { get; set; }
}

Devamı

SOLID Prensipleri : 02 Open Closed Principle

By Burak Tungut - 17.4.2016 - Kategori Design / Architectural Patterns

Open Closed PrincipleHerkese selamlar,

Havaların ısındığı şu güzel günlerde gezip tozmanın yanısıra birazda sizlerle paylaşım yapmak istedim. Ancak işin kötü tarafı bir kaç saate sahile inip orada kitap okumak gibi bir planım var, umarım bu nedenle makaleyi aceleye getirmem. Getirirsemde şimdiden affola :)

Geçtiğimiz aylarda SOLID prensiplerini anlatacağım bir makale dizisine başlamıştık. Bu makale ile 2. prensibimiz olan Open Closed Principle'a değineceğiz.
Prensibin bize anlatmak istediği şeyi şu şekilde ifade edebiliriz; "modüller gelişime açık, değişime kapalı olmalıdır".

Hiç şüphesiz modüler yapıların inşaa edildiği mimarilerde en çok kullanılan prensiplerden biri Open-Closed olup, yanına DI framework'ler ya da abstract factory implementasyonları kullanılır. Şimdi bu teorik yaklaşımları biraz uygulanabilir, el ile tutulabilir hale getirelim.

Problemi Tanıyalım

Çok ilginç örnekler ile implementasyonlar yapmaya bayılırım, bilirsiniz :) Bu prensibi anlatırken özellikle ilkokul ve lisede çokça rastladığımız faiz problemlerinden esinlendim. Hatta içerdiği bilinmeyenlerin (a, n, t) birleşimini alarak Ant Formül'ü diyede bir isme sahiptir. Sizlerde benim gibi yıllardır bu formülü kullanmamış olabilirsiniz. Onun için öncelikle faiz problemlerini çözmemize yardımcı olan Ant Formül'ünü bir hatırlayalım.

F = (a * n * t) / x

Bu formülde F faiz miktarını, a anaparayı, n faiz yüzdesini ve t zaman birimini gösterirken x ise yıllık, aylık, haftalık ya da günlük periyotlar olmak üzere sırasıyla 100, 1200, 5200 ve 36000 değerini alan bir bilinmeyendir.

Open-Closed Prensipsiz Uygulanışı

Prensip ya da prensipsiz eminim yüz farklı şekilde bu problemi çözecek bir algoritma inşaa edilebilir. Ben aklıma gelen ilk yöntemi seçiyorum ve öncelikle aşağıdaki gibi bir enumeration yaratıyorum.

public enum Interval
{
    Yearly,
    Montly
}

Arından InterestCalculator adında bir class ve içerisinde Calculate adında bir method yaratıyorum. Methodumuz parametre olarak a, n, t bilinmeyenlerini ve bir Interval alıyor, geriye ise decimal tipinde bir değer döndürüyor olsun. Tıpkı aşağıdaki gibi;

public class InterestCalculator
{
    public decimal Calculate(int a, int n, int t, Interval interval)
    {
        decimal retVal = 0;

        if (interval == Interval.Yearly)
        {
            return (a * n * t) / 100;
        }
        else if (interval == Interval.Montly)
        {
            return (a * n * t) / 1200;
        }

        return retVal;
    }
}

Devamı

SOLID Prensipleri : 01 Single Responsibility ve Agile Metodolojilerde Önemi

By Burak Tungut - 15.12.2015 - Kategori Design / Architectural Patterns

Herkese selam laugh

Paylaştığım iki adet elasticsearch makalesinden sonra araya başka bir makale koymak iyi olur diye düşündüm. Hep aynı konuları işleyen türk dizileri gibi on tane elasticsearch makalesi eminim düzenli okurlarımında canını sıkardı. Hem ilgilenen var, ilgilenmeyen var efendim! Öyle değil mi?

Gelelim okumaya başladığınız makalemizin konusuna. Gariptir ki bu makalede aslında SOLID prensiplerini işleyeceğim makale serisinin ilk adımı niteliği taşıyor. Yani paralelde başka bir seriye daha girmiş olduk. Sonumuz hayır olsun.

SOLID prensipleri 2000'li yıllarda Robert C.Martin tarafından ortaya atılmış beş adet prensipten oluşur. SOLID ismi ise bu beş presibin isimlerinin ilk harflerini alarak oluşturulmuştur. Yabancı kaynaklarda çevrilmiş haliyle SOLID presinsiplerinin amacı ise kısa vadede bazen taklalar atarak uzun vadede daha maintain (bakım) edilebilir ve extensible (genişletilebilir, esnetilebilir) mimariler kurulmasıdır. 

SOLID ve Agile Metodolojilerdeki Önemi

Günümüzde SOLID'in popülerliğinin arttığını şahsen görüyorum. Bunun nedenlerinden biri ise aslında Türkiye'de agile metodolojilerin git gide kullanılmaya başlanması. Sonuçta ne kadar agile software team o kadar refactoring, maintain edilebilirlik ve haliyle SOLID implementasyonları diyorum.

Bazen öyle legacy code içeren projeler görüyoruz ki bir sınıfında binlerce satır olabiliyor. (5000 satırı görmüşlüğüm var surprise)  Bunun en büyük nedenlerinen biride o yıllarca üstüne business eklenerek büyümüş olan projelerin her bir modülünün tamamiyle bir kaç developer sorumluluğuna bırakılması (A modülüne iş var. Kim bilir? Hasan bilir!)
Bir de ürün yetiştirmek için gerekli zamandan daha hızlı geri dönüşler bekleyen bir firmadan bahsediyorsak o modüllerden okunabilir kod çıkma olasılığı gittikçe düşüyor. Velhasıl sayabileceğimiz bir çok madde ve dış etkenler mevcut.

Konuyu çok dağıtmayayım. Bunlar benim şahsi görüşlerim idi. Yukarıda verdiğim örnek ile geçmişte uygulanan metodolojilere dil uzatmak istemedim. Sonuçta elde olan bu ise ve koşullar onu gerektiriyorsa pekte yapılabilecek birşey kalmıyor smiley

Şimdi SOLID prensiplerinden Single Responsibility yani Tek Sorumluluk prensibini incelemeye başlayalım.

Solid prensipleri

Devamı
1
Facebook
Son Yorumlar