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