不変の「パターン」はその長所から気に入っています。過去には、不変のデータ型(一部、ほとんど、またはすべて)を使用してシステムを設計することが有益であることがわかりました。多くの場合、そうすることで、作成するバグが少なくなり、デバッグがはるかに簡単になります。
しかし、私の仲間は一般的に不変を避けています。彼らはまったく経験がありません(それからはほど遠い)が、データオブジェクトを古典的な方法で書き込みます-すべてのメンバーのゲッターとセッターを持つプライベートメンバー。その後、通常、コンストラクターは引数をとらないか、単に便宜上いくつかの引数をとります。多くの場合、オブジェクトの作成は次のようになります。
Foo a = new Foo();
a.setProperty1("asdf");
a.setProperty2("bcde");
たぶん彼らはそれをどこでもします。たぶん、それらがどれほど重要であっても、それらの2つの文字列を受け取るコンストラクタを定義することすらありません。そして多分、それらは後でそれらの文字列の値を変更せず、変更する必要はありません。明らかに、これらのことが真実であれば、オブジェクトは不変として設計されるでしょう。(コンストラクターは2つのプロパティを取り、セッターはまったく取りません)。
オブジェクト型を不変として設計する必要があるかどうかをどのように決定しますか?判断するための適切な基準はありますか?
私は現在、自分のプロジェクトのいくつかのデータ型を不変に切り替えるかどうかを議論していますが、ピアにそれを正当化する必要があり、型のデータは(めったに)変更されない可能性があります-いつでも変更できますそれは不変の方法です(新しいものを作成し、変更したいものを除いて古いオブジェクトからプロパティをコピーします)。しかし、これが単に不変物が透けて見えるのが私の愛なのか、それとも実際にそれらの必要性/利益があるのかはわかりません。