17 Ağustos 2021 Salı

Replace Conditional Refactoring

Giriş
Replace Conditional Refactoring için bir kaç çözüm var.

1. Map Kullanmak. if-else konfigürasyon içinse bu bilgiyi bir veri yapısı içine doldurarak arama yapmak şeklinde oluyor.

2. Polymorphism Kullanmak

3. Early Return Kullanmak

4. if-else bloklarını tek bir döngü içine almak, 

5. reflection kullanmak

Örnek - Konfigürasyon 
Elimizde şöyle bir kod olsun
fun getCurrencyNameOf(country: String): String {
  return if (country == "India") {
    "Rupee"
  } else if (country == "USA") {
    "Dollars"
  } else if (country == "UK") {
    "Euro"
  } else if (country == "Japan") {
    "Yen"
  } else if (country == "China") {
    "Yuan"
  } else {
    "NA"
  }
}
Bu kodu şu hale getiririz
class Currency {
  val map = HashMap<String, String>();
  
  init {
    map.put("India", "Rupee")
    map.put("UK", "Euro")
    map.put("Japan", "Yen")
    map.put("USA", "Dollar")
    map.put("China", "Yuan")
  }


  fun getCurrencyNameOf(country: String): String {
    return map.get(country) ?: "NA"
  }
}

Örnek - Polymorphism
Bu örneğin adı "Replace Conditional With Polymorphism Refactoring". Klasik bir refactoring örneğidir.

Elimizde bir şekil hiyerarşimiz olsun. Her şekil için alan hesaplamak isteyelim. Eğer CalculateArea() metodu ana sınıfta ise, yeni bir şekil tipi eklemek istediğimizde, ana sınıfı da değiştirmemiz gerekir. Bu durumda SOLID - Open-Closed Principle kuralını ihlal ederiz.
public double CalculateArea()
{
  switch(BoxType)
  {
    case BoxType.Rectangle:
      return Width * Height;
    case BoxType.Square:
      return Width * Height; 
    case BoxType.Circle:
      return Radius * Math.PI;
    default: return 0;
  }
}

Hiç yorum yok:

Yorum Gönder