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.

One thought on “Anemic Domain Model

  1. Pingback: Yazılım Mühendisliği » Tell Don’t Ask Principle

Comments are closed.