Bir metot bünyesinde bir işlemin sonucu geçici bir değişkende saklanabilir. Aşağıda yer alan kod örneğinde basePrice geçici bir değişkendir ve ihtiva ettiği değer fiyat * adet şeklinde hesaplanmaktadır. Replace Temp with Query refactoring metodunu kullanılarak geçici değişkenin değerini elde etmek için kullanılan yapı yeni bir metot bünyesinde taşınır. Geçici değişkenin kullanıldığı diğer alanlar metot ismiyle değiştirilir. Bu şekilde yapılan işlemin başka metotlar bünyesinde kullanılması sağlanır.
public double calculatePrice(final double price, final int itemCount) { double basePrice = price * itemCount; double tax = ( basePrice / 100 ) * 18.00; double totalPrice = basePrice + tax; return totalPrice; }
Refactoring işleminin ardından oluşan yeni yapı aşağıdaki şekildedir.
package com.kurumsaljava.refactoring.replaceTempwithQuery; public class ReplaceTempwithQueryRefactored { private double price; private int itemCount; public ReplaceTempwithQueryRefactored(final double pPrice, final int pItemCount) { this.price = pPrice; this.itemCount = pItemCount; } public double calculatePrice() { double tax = (getBasePrice() / 100) * 18.00; return getBasePrice() + tax; } private double getBasePrice() { return price * itemCount; } }
getBasePrice isminde, başka bir metot bünyesinde tekrar kullanılabilir yapıda yeni bir metot oluşturmus olduk. getBasePrice sorgu (query) yaptığımız bir metotdur. Belli bir değeri elde etmek için bu metodu sorgulamaktayız. basePrice isimli geçici değişkeni ortadan kaldırmak için getBasePrice metodunu kullandık yani geçici değişkeni bir sorguya dönüştürmüş olduk. Bu sebepten dolayı Replace Temp with Query‘yi Geçici Değişkenlerin Sorguya Dönüştürülmesi olarak tercüme ettim.
calculatePrice metodunu tekrar gözden geçirdiğimiz zaman, katma değer verginin hesaplandığı görmekteyiz. Eğer daha önce basePrice geçici değişkenini bir sorguya dönüştürmemiş olsaydık, katma değer vergisinin hesaplandığı bölümü refactor etmemiz kolay olmayacaktı. Ama bu şekilde katma değer vergisinin hesaplandığı kod kısmını aşağıdaki şekilde refactor edebiliriz.
package com.kurumsaljava.refactoring.replaceTempwithQuery; public class ReplaceTempwithQueryRefactored { private static final double TAX_RATE = 18.00; private double price; private int itemCount; public ReplaceTempwithQueryRefactored(final double pPrice, final int pItemCount) { this.price = pPrice; this.itemCount = pItemCount; } public double calculatePrice() { double tax = calculateTax(); return getBasePrice() + tax; } private double calculateTax() { return (getBasePrice() / 100) * TAX_RATE; } private double getBasePrice() { return price * itemCount; } }
EOF (End Of File)
Özcan Acar