如何保持 2 个对象之间相互依赖的不可变性

本文关键字:依赖 不可变 可变性 之间 何保持 对象 | 更新日期: 2023-09-27 18:34:30

我在创建 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;
    }
}

如何保持 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;
    }
    public Another() {}
    public setOne(One one)
    {
       this.one = one;
    }
}

然后,您可能需要考虑在 Other.setOne(( 中放置某种保护逻辑(异常?(,以便 One 对象只能设置一次。

还要考虑到,在不初始化 one 变量的情况下,使用默认构造函数实例化Another时可能会遇到问题,在这种情况下,您可能必须删除只读属性并在 setOne(( 中使用上述逻辑

您可以创建 One 类,并在内部让它创建引用OneAnother 类。这可能会增加两者之间的耦合,但可以满足您的需求,例如:

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();