1

両方が相互に依存している2つの不変オブジェクトの作成に問題があります。質問:これらのオブジェクトを不変に保ちながら、この状況を解決するにはどうすればよいですか?

public class One
{
    private readonly Another another;
    public One(Another another)
    {
        this.another = another;
    }
}

public class Another
{
    private readonly One one;
    public Another(One one)
    {
        this.one = one;
    }
}
4

1 に答える 1

1

次のように、少なくともクラスの1つへの依存性注入を許可しない限り、提案したことを実行することはできません。

public class One
{
    private readonly Another another;
    public One(Another another)
    {
        this.another = another;
    }
}

public class Another
{
    private readonly One one;
    public Another(One one)
    {
        this.one = one;
    }
    public Another() {}
    public setOne(One one)
    {
       this.one = one;
    }
}

次に、Oneオブジェクトを1回だけ設定できるように、Another.setOne()に何らかの保護ロジック(例外?)を配置することを検討する必要がある場合があります。

Anotherまた、変数を初期化せずにデフォルトコンストラクターを使用してインスタンス化する際に問題が発生する可能性があることも考慮してください。oneその場合、読み取り専用属性を削除し、setOne()で前述のロジックを使用する必要があります。

また

Oneクラスを作成し、内部でAnotherへの参照を使用してクラスを作成させることができますOne。これにより、2つの間の結合が増える可能性がありますが、次のように必要なことを実行します。

public class One
{
    private readonly Another another;
    public One()
    {
        this.another = new Another(this);
    }
    public Another getAnother()
    {
        return this.another;
    }
}

public class Another
{
    private readonly One one;
    public Another(One one)
    {
        this.one = one;
    }
    public Another() {}
}

...

One one = new One();
Another another = one.getAnother();
于 2012-05-17T05:52:56.933 に答える