ImmutablePart
不変の純粋なデータであるこのクラスについて考えてみましょうObject
:
public class Clazz1 {
private final ImmutablePart immu ;
private String f1;
private boolean f2;
private int f3;
/** some constructor building up the immu and
setting the fields to init values
...
...
**/
public ImmutablePart getImmu(){return immu;}
public String getF1(){return f1;}
public boolean getF2(){return f2;}
public int getF3(){return f3;}
public void setF1(String f1){this.f1=f1;}
public void setF2(boolean f2){this.f2=f2;}
public void setF3(int f3){this.f3=f3;}
}
この段階で構成を使用して、一方の部分が変更可能で、もう一方の部分が不変であることをより明確にするのは良い習慣ですか、それとも単なるボイラープレートですか? このように (MutablePart
のフィールドに getter と setter を使用Clazz1
)。
public class Clazz2 {
private final ImmutablePart immu ;
private final MutablePart mutable;
/** some constructor building up the two final objects
...
...
**/
public ImmutablePart getImmu(){return immu;}
public MutablePart getMutable(){return mutable;}
}
EDIT1 :より具体的に言っても大丈夫です。不変部分は、ある種のメタ情報を含むファイルから構築されているため、変更することは意図されていません。変更可能な部分は、ランタイムに関して進化します。私が p2p アプリケーションに取り組んでいるとしましょう。不変部分には、クライアントがピアと共有する一連のファイルに関するすべての情報と、受信したパケットの信頼性を保証するためのハッシュキーが含まれます。可変部分には、共有の状態に関する情報が含まれます。つまり、いくつかの状態、アップロードされたバイト数、ダウンロードされたバイト数などです。不変部分は簡単に「metaInfo」と呼ばれ、可変部分は「コンテキスト」と呼ばれます。より意味のある名前が必要な場合。しかし、私の質問は、そのような設計の有用性に関するものでした。回答ありがとうございます。
EDIT2:私が選んだ名前は、抽象化の目的でここにあるだけです。実際の実装では、より良い名前を付けます。つまり、一見すると混乱するかもしれませんが、「明示的」と言うのは、一方の部分を「不変」、もう一方の部分を「変更可能」と明示的に命名するのではなく、2 つの異なるオブジェクトへの両方の部分を厳密に区別することを意味することに同意します。 .