Monthly Archives: May 2007

Anemic Domain Model

skeleton Genellikle bu sıralar birçok projede sıklıkla gördüğüm hatta kendi yaptığım projelere baktığımda da oldukça fazla kullandığını farkettiğim Anemic Domain Model kavramını Martin Fowler bu yazısında oldukça güzel özetlemiş.Kısaca açıklayacak olursak kodumuzda gerçek dünyayı temsil eden birçok nesne bulunuyor fakat nesnelere dikkatlice baktığımızda sadece property,getter/setter metodlarından ibaret olduğunu görüyoruz. Yani projeye baktığımızda aşağıdaki tarzda birçok sınıf görmek mümkündür.

  
  
 
   
  
  
 
 
public class Urun {
    private String urunKodu;
    private String urunAdi;
    private double fiyat;

    public double getFiyat() {
        return fiyat;
    }

    public void setFiyat(double fiyat) {
        this.fiyat = fiyat;
    }

    public String getUrunAdi() {
        return urunAdi;
    }

    public void setUrunAdi(String urunAdi) {
        this.urunAdi = urunAdi;
    }

    public String getUrunKodu() {
        return urunKodu;
    }

    public void setUrunKodu(String urunKodu) {
        this.urunKodu = urunKodu;
    }
}

İlk bakışta hiçbirşey yanlış gibi görünmüyor açıkçası ilk başlarda banada öyle geliyordu :) Ama biraz düşünürsek OOP’nin temel mantığının belirli bir bilgiye sahip sınıfların o bilgiyi kullanarak bazı işlemleri yapması, bazı sorumlulukları yerine getirmesi temeline oturduğunu biliyoruz. Ama yukarıdaki tarz sınıflarda gördüğümüz gibi sınıflar data anlamından oldukça zengin fakat yaptığı işlem açısından oldukça fakir. Hiçbir sorumluluğu yerine getirmiyor sadece getter/setter metodlarından ibaret. Bu tarz bir yapı oluncada bu sınıfın yapması gereken işleri onun bilgilerini getter/setter kullanarak alan başka sınıflar yapıyor. Gerçekten Fowler’ın dediği gibi bu tamamen prosedürel mantıkla geliştirilmiş bir kod. Bu tarz bir kodu C’de Struct yada Pascal’da Record yapılarını kullanarakda tasarlayabilirdik. Ayrıca OOP’nin temel prensibi olan Encapsulation yoksunu bir sınıf. Bütün iç yapısı getter/setter metodlarıyla dışarıya açılmış . İleride ufak bir değişiklikte başımıza bela açmaşı oldukça muhtemel. Tavsiyem bu tars sınıflar gördüğünüz zaman onları getter/setter metodlarını kullanan diğer sınıflara bakın muhtemelen bu alanarda yapılan işlemler getter/setter kullanarak iç yapısını eriştiğimiz sınıfın yerine getirmesi gereken görevlerdir.

Test-Driven Development: A Practical Guide

TDDPracticalTest Driven Development’a yeni baştan sağlam bir başlangıç yapmak için kitap okumaya karar verdim. Test-Driven Development: A Practical Guide TDD temellerini örnek bir proje üzerinde adım adım ilerleyerek öğretiyor. Proje ufak bir film yöneticisi, Java ve Swing kullanılarak yapılıyor. Genelde pratiğe yönelik kitapları okumayı sevdiğim için şuanda kadar oldukça iyi gidiyor. Yeni başlayanlara tavsiye ederim.

Kitabı bitireli oldukça zaman olmuş ama bu yorumu sonradan bu yazıya eklemek istedim.TDD geçmişim yaklaşık 2 seneye geliyor.

Bu kitaptan sonra birçok kitap,makale,ve yazıdan faydalandım ama hala bu kitabı benim için en önemli kaynaklardan biri olarak görüyorum. Test Driven Development hakkında gerçekten bu kitaptan çok faydalandım.Özellikle pratik bakımından küçükte olsa bir projeji baştan sona geliştirmesi TDD’nin projede nasıl işlediğini görmem açısından oldukça iyi olmuştu.

Kitabın içinde Unit testing,Mock objects,GUI testing,Refactoring.. birçok konuda oldukça faydalı bilgiler veriliyor. En sonunda da TDD ile yazılan kodun kalitesi metrikler ile ölçülüp gözden geçiriliyor. Özellikle GUI testing gibi uğraştırıcı bir konuda kitaptan oldukça faydalanmıştım. Herkese tekrar mutlaka okumasını tavsiye ediyorum.

Siftah

En son blog girişimimin başarısız oluşundan sonra bugün arkadaşın blog adresini görünce tekrar içimden blog oluşturma isteği geldi. Genel olarak iş hayatımdan tecrübelerimi, yazılım mühendisliği üzerine önemli konuları paylaşmaya çalışacağım. Eee hadi kurdaleyi keselimde bitsin şu açılış merasimi :) Vatana millete hayırlı olsun.. Siftah benden bereketi sizden diyelim.