Aşağıdaki tarzda if/else bloklarıyla sıkça karşılaşırız. Eğer böyle yapılar Koşullu Mantığın Komut İle Değiştirilmesi (Replace Conditional Dispatcher With Command) refactoring metodu ile yok edilmesse, kodun bakımı ve geliştirilmesi zaman içinde zorlaşır. Bu örnekte görüldüğü gibi yeni bir locale ile işlem yapabilmek için koda yeni bir else if bloğunun eklenmesi gereklidir, yani uygulamaya yeni bir davranış biçimi kazandırabilmek için kodun değiştirilmesi gerekmektedir. Bu Açık Kapalı Tasarım Prensibi (Open Closed Principle – OCP) ile uyumlu değildir. Uygulamayı OCP tasarım prensibi ile uyumlu hale getirmek için Koşullu Mantığın Komut İle Değiştirilmesi (Replace Conditional Dispatcher With Command) refactoring metodu uygulanır.

if (locale != null && locale.equals("de_DE")) {
	taxRate = 19.00;
	final Double tax = Double.valueOf((price / 100) * taxRate);
	result = Double.valueOf(tax.doubleValue() + price);
} else if (locale != null && locale.equals("tr_TR")) {
	taxRate = 18.00;
	final Double tax = Double.valueOf((price / 100) * taxRate);
	result = Double.valueOf(tax.doubleValue() + price);
} else if (locale != null && locale.equals("at_AT")) {
	taxRate = 20.00;
	final Double tax = Double.valueOf((price / 100) * taxRate);
	result = Double.valueOf(tax.doubleValue() + price);
}

  Koşullu Mantığın Komut İle Değiştirilmesi Kata Kodu (976 bytes, 1.478 hits)
You need to be a registered user to download this file.

EOF (End Of Fun)
Özcan Acar

3 yorum | |
1 yıldız2 yıldız3 yıldız4 yıldız5 yıldız (2 değerlendirme, ortalama: 5,00, toplam oy 5)
Loading...

3 Yorum

Pratik Programcı Yayınları » Birim Testlerinde Beklentilerimi Daha Net Nasıl İfade Edebilirim?05 Haziran 2014 16:59

[…] Beklentilerimi Daha Net Nasıl İfade Edebilirim?Kodkata.com bünyesinde hazırladığım Koşullu Mantığın Komut İle Değiştirilmesi isimli katada aşağıda yer alan birim testlerinden yola çıkılarak, uygulama yeniden […]

Murat Berk24 Temmuz 2014 17:43

Belki bu yaklaşımda uygulanabilinir.

if (locale != null) {
switch (locale) {
case “de_DE”:
taxRate = 19.00;
final Double tax = Double.valueOf((price / 100) * taxRate);
result = Double.valueOf(tax.doubleValue() + price);
break;
case “tr_TR”:
taxRate = 18.00;
final Double tax2 = Double.valueOf((price / 100) * taxRate);
result = Double.valueOf(tax2.doubleValue() + price);
break;
case “at_AT”:
taxRate = 20.00;
final Double tax3 = Double.valueOf((price / 100) * taxRate);
result = Double.valueOf(tax3.doubleValue() + price);
break;
}
}

ozcanacar July 24 2014 18:24 pm

Buradaki amacimiz if/else ve switch gibi yapilari ortadan kaldirmak.

http://kodkata.com/wp-content/themes/selecta