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.
Yazar arşivleri: Özcan Acar
Metot Düzenleme (Compose Method)
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 Sınıf Oluşturma (Extract Class) refactoring metodunu kullanarak bu sınıfı SRP’ye uygun hale getirebiliriz.
Stable Abstractions Principle (SAP) – Stabil Soyutluk Prensibi
Bu yazıyı PDF olarak edinebilirsiniz.
Stable Abstractions Principle (SAP) – Stabil Soyutluk Prensibi (17,2 KiB, 5.968 yükleme)
Stable Dependencies Principle (SDP) – Stabil Bağımlılıklar Prensibi
Bu yazıyı PDF olarak edinebilirsiniz.
Stable Dependencies Principle (SDP) – Stabil Bağımlılıklar Prensibi (43,3 KiB, 5.250 yükleme)
Acyclic Dependency Principle (ADP) – Çevrimsiz Bağımlılık Prensibi
Bu yazıyı PDF olarak edinebilirsiniz.
Acyclic Dependency Principle (ADP) – Çevrimsiz Bağımlılık Prensibi (36,8 KiB, 4.463 yükleme)
Common Closure Principle (CCP) – Ortak Kapama Prensibi
Yazılım sistemi müşteri gereksinimleri doğrultusunda zaman içinde değişikliğe uğrar. Meydana gelen değişiklerin sistemde bulunan birçok paketi etkilemesi, sistemin bakılabilirliğini negatif etkiler. CCP’ye göre yapılan değişikliklerin sistemin büyük bir bölümünü etkilemesini önlemek için, aynı sebepten dolayı değişikliğe uğrayabilecek sınıfların aynı paket içinde yer alması gerekir. CCP daha önce incelediğimiz, sınıflar için uygulanan Single Responsibility (SRP) prensibinin paketler için uygulanan halidir. Her paketin değişmek için sadece bir sebebi olmalıdır. CCP uygulandığı taktirde sistemin bakılabilirliği artırılır ve test ve yeni sürüm için harcanan zaman ve emek azaltılır.
Koşullu Mantığın Komut İle Değiştirilmesi (Replace Conditional Dispatcher With Command)
Strateji tasarım şablonu için bakınız…
Open Closed Principle tasarım prensibi için bakınız…
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 istediğimiz metot, bünyesinde bulunduğu sınıfa yeni bir sorumluluk yüklüyor.
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:
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 değiştirilir. Bu şekilde yapılan işlemin başka metotlar bünyesinde kullanılması sağlanır.
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.
Yeni Metot Oluşturma (Extract Method)
Uzun metotları daha okunabilir ve kompak hale getirmek için Extract Method refactoring metodunu kullanabiliriz.
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 = Double.valueOf(tax.doubleValue() + price); return 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;
IDL Compiler
Bu aralar bir Corba projesinde çalışıyorum. Corba teknolojisinde interface tanımlama dili olarak IDL kullanılıyor. Eğer bir Corba servisine erişimi sağlamak için size bir IDL verildi ise, bu IDL´i kullanarak client sınıflarını oluşturabilirsiniz. Bu işlem için aşağidaki sınıfı oluşturdum.
Tek Kelimeyle Harika!
Bugün Amazon.com’dan sipariş ettiğim Kindle DX geldi. Tek klime ile harika. Daha önce uzunca bir zaman Irex Iliad kullandım. Ama Kindle DX onu arattırmayacak sanırım :)
Subclipse Şifresi
Elipse altında Subversion pluginini kullanıyorsanız, bir Subversion repositorisine bağlanmak için kullandığınız şifreyi nasıl değiştirebileceğinizi merak etmiş olabilirsiniz. Eclipse altında bu şifreyi değiştirmek mümkün değil, çünkü plugin şifreyi %APPDATA%\Subversion\auth (Linux altında ~/.subversion/auth) altında saklıyor. Bu dizini sildiğiniz taktirde, tekrar şifreyi girme panelini görebilirsiniz.
Yazılım Maketleri
Dün kızıma lego parçalarından oluşan bir set aldım. Bu sabah beraber lego parçalarından kaleler yaparken birşeyin farkına vardım. Yazılım mühendisleri olarak çok soyut şeylerle ugraşıyoruz. Artık soyutluk seviyesi öyle bir hal almış ki, geçenlerde kendimi CPU içide yer alan registerlerin Assembler kullanılarak programlanmasından bahseden bir programcı hakkında “bu kadar low level işlerle uğraşılır mı ya” gibisinden düşünürken yakaladım. Her defasında soyutluk çıtasını bir kademe daha yukarıya çekmeye alışmış ben, somut olan ve ele alınıp, bir mikroskop altında görülebilecek olan CPU registerlerine ne kadar yabancılaşmışım! Bu verebileceğim örneklerden sadece bir tanesi.
Credit Suisse – Zürich
4.4.2011 tarihinden itibaren İsviçre’nin Zürich kentinde bulunan Credit Suisse bankası için freelance danışman olarak çalışmaya başladım. Okumaya devam et