私は Java で設計していますが、これは一般的な OOP の質問です。私は特定の問題を解決しようとしているわけではなく、いくつかの設計原則について考えてみました。
私の経験から、私はオブジェクトのセットアップを 3 つのフェーズに分離する習慣に達しました。
目標は、余分な作業、難読化されたコード、機能不全の拡張性を最小限に抑えることです。
工事
- 有効なオブジェクトを作成するために必要な最小限のアクションは、存在テストに合格します
- インスタンス化して初期化するのは「一度だけ」であり、オーバーライドされることはなく、オブジェクトの存続期間中変更/変更されない非変数オブジェクト
- 最終メンバーの初期化
- 基本的にランタイム スタブ
初期化
- オブジェクトを便利にする
- パブリックにアクセス可能なメンバーをインスタンス化して初期化する
- 変数値であるプライベート メンバーをインスタンス化して初期化する
- オブジェクトは、例外を生成することなく外部テストに合格する必要があります (コードが正しいと仮定)
リセット
- 何もインスタンス化しない
- すべての変数 public/private メンバーにデフォルト値を割り当てます
- オブジェクトを正確な状態に戻します
おもちゃの例:
public class TestObject {
private int priv_a;
private final int priv_b;
private static int priv_c;
private static final int priv_d = 4;
private Integer priv_aI;
private final Integer priv_bI;
private static Integer priv_cI;
private static final Integer priv_dI = 4;
public int pub_a;
public final int pub_b;
public static int pub_c;
public static final int pub_d = 4;
public Integer pub_aI;
public final Integer pub_bI;
public static Integer pub_cI;
public static final Integer pub_dI = 4;
TestObject(){
priv_b = 2;
priv_bI = new Integer(2);
pub_b = 2;
pub_bI = new Integer(2);
}
public void init() {
priv_a = 1;
priv_c = 3;
priv_aI = new Integer(1);
priv_cI = new Integer(3);
pub_a = 1;
pub_c = 3;
pub_aI = new Integer(1);
pub_cI = new Integer(3);
}
public void reset() {
priv_a = 1;
priv_c = 3;
priv_aI = 1;
priv_cI = 3;
pub_a = 1;
pub_c = 3;
pub_aI = 1;
pub_cI = 3;
}
}