Category Archives: Refactoring

Kataların Anası

Java ve diğer dillerde kullanılan switch komutu OCP tasarım şablonuna ters düşmekle beraber, kodun bakımı ve geliştirilmesini zorlaştırmaktadır. Martin Fowler Refactoring isimli kitabında yer alan Video Store örneğinde “Replace Conditional with Polymorphism” refactoring metodu ile switch komutunun nasıl yok edilebileceğini göstermektedir. Robert C. Martin’in CleanCoders.com sayfasında Video Store örneğini daha geniş çaplı yeniden yapılandıran bir […]

Parametrik Konstruktör (Parameterize Constructor)

Bir sınıf konstruktörü bünyesinde oluşturulan nesne, bu sınıfın test edilmesini zorlaştırır. Bunun bir örneğini EmployeeManager sınıfında görmekteyiz. Sınıf değişkeni olan dao konstruktör bünyesinde oluşturulmaktadır. [source language=’java’] package com.kurumsaljava.refactoring.parameterizeConstructor; public class EmployeeManager { private EmployeeDao dao; public EmployeeManager() { this.dao = new EmployeeDao(); } } [/source] EmployeeManager sınıfının test edilebilmesi için EmployeeDao‘nun kullanılması zorunludur. EmployeeDao burada […]

Yeni Sınıf Oluşturma (Extract Class)

Bir sınıfın yüzlerce ya da binlerce satırdan oluşmasının ana sebeplerinden birisi bu sınıfa birden fazla sorumluluğun yüklenmiş olmasıdır. Single Repsonsiblity (SRP) prensibinden de bildigimiz gibi her sınıfın sadece ve sadece bir sorumluluk alanı olmalıdır yani sınıf sadece bir iş yapmalıdır ve bu işlemi iyi yapmalıdır. Aşağıda yer alan Order sınıfı SRP ile uyumlu değildir. Yeni […]

Metodu Metot Nesnesine Dönüştürme (Replace Method with Method Object)

Metodu Metot Nesnesine Dönüştürme (Replace Method with Method Object) refactoring metodu aşağıdaki durumlarda kullanılabilir: Çok sayıda lokal değişken Yeni Metot Oluşturma (Extract Method) refactoring metodunun kullanımını engelliyor. Uzun bir metot bünyesinde tanımlanan lokal değişkenlerin kapsama alanı (scope) geniş yani lokal değişkenler metodun sonuna kadar kullanılıyor. Metot SRP tasarım prensibi ile uyumlu degil yani refactor etmek […]

Refactoring Oturumu (Video)

Bu refactoring oturumu bünyesinde mevcut sınıfı aşağıda yer alan refactoring metotlarını kullanarak yeniden yapılandırdım: Koşulları Parçalarına Ayırma (Reverse Conditional) Yeni Metot Oluşturma (Extract Method) Geçici Değişkenlerin Sorguya Dönüştürülmesi (Replace Temp with Query) EOF (End Of Fun) Özcan Acar

Geçici Değişkenlerin Sorguya Dönüştürülmesi (Replace Temp with Query)

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 […]

Parametrele Değer Atamasının Kaldırılması (Remove Assignments to Parameters)

Metot imzasında yer alan parametrelere metot bünyesinde değer atanmamalıdır. Bu gibi atamalar istenmeyen sonuçlar doğurabilir. Remove Assignments to Parameters refactoring metodu kullanılarak bu tür parametre değer atamaları geçici degişkenlere yapılmalıdır. [source language=”java”] private void execute(int value) { if (value == 10) value = 1; doSometthink(value); } [/source] Yukarda yer alan metot Remove Assignments to Parameters […]

Yeni Metot Oluşturma (Extract Method)

Uzun metotları daha okunabilir ve kompak hale getirmek için Extract Method refactoring metodunu kullanabiliriz. [source language=”java”] private Double calculatePrice(double price, String locale) { Double result; double taxRate = 0; if (isCountryGermany(locale)) { taxRate = TAX_RAT_GERMANY; } else if (isCountryTurkishRepublic(locale)) { taxRate = TAX_RAT_TURKISH_REPUBLIC; } Double tax = Double.valueOf( (price / 100) * taxRate); result = […]

Koşulları Parçalarına Ayırma (Reverse Conditional)

TaxCalculator sınıfı, uygulamanın kullanıldığı ülkeye bağlı olarak katma değer vergisini ihtiva eden fiyatı hesaplamak için kullanılmaktadır. [source language=’java’] package com.kurumsaljava.refactoring.reverseconditional; public class TaxCalculator{ private static final double TAX_RAT_GERMANY = 19.00; private static final double TAX_RAT_TURKISH_REPUBLIC = 18.00; public Double calculate(String locale, double price){ Double result = new Double(0.0); if(locale != null && locale.equals(“de_DE”)){ Double tax […]