Değişmez "kalıbı" güçlü olduğu için seviyorum ve geçmişte değişmez veri türlerine sahip sistemleri tasarlamayı yararlı buldum (bazıları, hatta hepsi). Sık sık yaptığım zaman kendimi daha az hata yazarken buluyorum ve hata ayıklama çok daha kolay.
Ancak, genel olarak akranlarım değişmez olmaktan uzak duruyor. Hiç deneyimsiz değiller (ondan uzak), ancak veri nesnelerini klasik yoldan yazıyorlar - özel üyeler bir alıcı ve her üye için belirleyici. O zaman genellikle kurucuları hiçbir argüman almazlar ya da sadece kolaylık sağlamak için bazı argümanlar alırlar. Sıklıkla, bir nesne oluşturmak şöyle görünür:
Foo a = new Foo();
a.setProperty1("asdf");
a.setProperty2("bcde");
Belki bunu her yerde yaparlar. Belki ne kadar önemli olursa olsun, bu iki ipi alan bir kurucu bile tanımlamazlar. Belki de daha sonra bu tellerin değerini değiştirmezler ve asla gerek duymazlar. Açıkçası, eğer bu şeyler doğruysa, nesne değişmez olarak tasarlanmalı, değil mi? (yapıcı iki özelliği alır, ayarlayıcı yok).
Bir nesne türünün değişmez olarak tasarlanıp tasarlanmayacağına nasıl karar veriyorsunuz? Yargılamak için iyi bir kriter seti var mı?
Şu anda kendi projemdeki birkaç veri türünün değişmez hale getirilip değiştirilmeyeceğini tartışıyorum, ancak bunu akranlarıma doğrulamak zorunda kalacağım ve türlerdeki veriler (ÇOK nadiren) değişebilir - tabii ki istediğiniz zaman değiştirebilirsiniz değişmez yolu (değiştirmek istediğinizler hariç eski nesneden özellikleri kopyalayarak, yeni bir tane oluşturun). Fakat bunun sadece ortaya çıkan değişmezlere olan aşkım olup olmadığından veya onlardan yararlanma / fayda için gerçek bir ihtiyaç olup olmadığından emin değilim.