Saya suka "pola" abadi karena kekuatannya, dan di masa lalu saya merasa bermanfaat untuk merancang sistem dengan tipe data yang tidak dapat diubah (beberapa, sebagian atau bahkan semua). Seringkali ketika saya melakukannya, saya menemukan diri saya menulis lebih sedikit bug dan men-debug jauh lebih mudah.
Namun, teman-teman saya pada umumnya menghindar dari kekekalan. Mereka sama sekali tidak berpengalaman (jauh dari itu), namun mereka menulis objek data dengan cara klasik - anggota pribadi dengan pengambil dan penyetel untuk setiap anggota. Maka biasanya konstruktor mereka tidak mengambil argumen, atau mungkin hanya mengambil beberapa argumen untuk kenyamanan. Begitu sering, membuat objek terlihat seperti ini:
Foo a = new Foo();
a.setProperty1("asdf");
a.setProperty2("bcde");
Mungkin mereka melakukan itu di mana-mana. Mungkin mereka bahkan tidak mendefinisikan konstruktor yang mengambil dua string, tidak peduli betapa pentingnya mereka. Dan mungkin mereka tidak mengubah nilai string itu nanti dan tidak perlu. Jelas jika hal-hal itu benar, objek akan dirancang lebih baik sebagai abadi, bukan? (konstruktor mengambil dua properti, tidak ada setter sama sekali).
Bagaimana Anda memutuskan apakah suatu jenis objek harus dirancang sebagai tidak berubah? Apakah ada seperangkat kriteria yang baik untuk menilai itu?
Saat ini saya sedang berdebat apakah akan mengganti beberapa tipe data dalam proyek saya sendiri menjadi tidak berubah, tetapi saya harus membenarkannya kepada rekan-rekan saya, dan data dalam tipe tersebut mungkin (SANGAT jarang) berubah - pada saat itu tentu saja Anda dapat mengubah itu cara abadi (buat yang baru, salin properti dari objek lama kecuali yang ingin Anda ubah). Tetapi saya tidak yakin apakah ini hanya kecintaan saya terhadap kekekalan yang ditunjukkan, atau apakah ada kebutuhan aktual / manfaat dari mereka.