Alıcı ve ayarlayıcılar genellikle uygun OO olmadığından eleştirilir. Öte yandan, gördüğüm çoğu OO kodunun geniş alıcıları ve belirleyicileri var.
Alıcılar ve belirleyiciler ne zaman haklı çıkar? Bunları kullanmaktan kaçınmaya çalışıyor musunuz? Genelde aşırı mı kullanılıyor?
En sevdiğiniz dil özelliklere sahipse (benimki) bu tür şeyler de bu soru için alıcılar ve belirleyiciler olarak kabul edilir. OO metodolojisi açısından aynı şeylerdir. Onlar sadece daha güzel sözdizimi var.
Alıcı / Belirleyici Eleştirisi Kaynakları (bazıları daha iyi görünürlük sağlamak için yorumlardan alınmıştır):
- http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html
- http://typicalprogrammer.com/?p=23
- http://c2.com/cgi/wiki?AccessorsAreEvil
- http://www.darronschall.com/weblog/2005/03/no-brain-getter-and-setters.cfm
- http://www.adam-bien.com/roller/abien/entry/encapsulation_violation_with_getters_and
- http://www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html
Eleştiriyi basitçe ifade etmek için: Alıcılar ve Düzenleyiciler, nesnelerin iç durumunu nesnenin dışından değiştirmenize olanak tanır. Bu kapsülleme ihlal ediyor. Sadece nesnenin kendisi içsel durumu önemsemelidir.
Ve örnek bir Prosedür kod sürümü.
struct Fridge
{
int cheese;
}
void go_shopping(Fridge fridge)
{
fridge.cheese += 5;
}
Kodun mutator sürümü:
class Fridge
{
int cheese;
void set_cheese(int _cheese) { cheese = _cheese; }
int get_cheese() { return cheese; }
}
void go_shopping(Fridge fridge)
{
fridge.set_cheese(fridge.get_cheese() + 5);
}
Alıcılar ve belirleyiciler, uygun kapsülleme sağlamadan kodu daha karmaşık hale getirdi. İçsel durum başka nesneler için erişilebilir olduğundan, bu alıcıları ve ayarlayıcıları ekleyerek çok fazla kazanamayız.
Soru daha önce Yığın Taşması ile tartışıldı:
Getters and setters are often criticized as being not proper OO
- Alıntı lütfen.