![]()
Gelişlemelere açık, değişimlere kapalı bir tasarım kullanılması gerektiğini belirtir. Diğer bir deyişle var olan uygulama üzerine sürekli yeni modüller ve işlevler ekleyebilmelisiniz. Fakat bunu yaparken var olan kodlar üzerinde bir değişiklik yapmamalısınız. Geliştirme yaparken de olan değişikliklerin geriye dönük olarak uyumlu olması önemlidir.
Bir örnek ile bakalım
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public class BadDrinks { public enum DrinkType { Water, Coffee, Tea } public double GetTotalPrice(double amount, DrinkType drinkType) { double totalPrice = 0; if (drinkType == DrinkType.Water) { totalPrice += amount * 5.00; } else if (drinkType == DrinkType.Coffee) { totalPrice += amount * 9.25; } else if (drinkType == DrinkType.Tea) { totalPrice += amount * 3.50; } return totalPrice; } } |
Burada içecek fiyatları Tek bir method ile yapılırken ürünler de başka işlemelr yapıldığında burası karışacaktır. Yani gelişime kapalı bir yapıdadır.
Şİmdi doğru bir dizayn ile bunları ayuıracağız.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
public abstract class GoodDrink { public abstract double GetTotalPrice(double amount); } public class Water : GoodDrink { public override double GetTotalPrice(double amount) { return amount * 3.50; } } public class Coffee : GoodDrink { public override double GetTotalPrice(double amount) { return amount * 9.25; } } public class Tea : GoodDrink { public override double GetTotalPrice(double amount) { return amount * 5.00; } } |
Burada görüldüğü gibi bir abstract (sanal) class tanımlayarak Hesaplama işini burada yaptım. Sonra ürünlerimi ayırarak her ürüne ait işleri ona özel class’ında yaptım. Bu şekilde o ürün ile alkalı başka işler istendiğinde rahatlıkla geliştirme yapılacaktır.
Kaynak kodlarına adresten ulaşabilirsiniz.
Sağlıcakla kalın…








Bir yanıt yazın