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ı
1
Facebook
Son Yorumlar