如何保持 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;
}
}
除非您
至少允许对其中一个类进行依赖注入,否则不可能按照您的建议进行操作,如下所示:
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
类,并在内部让它创建引用One
的 Another
类。这可能会增加两者之间的耦合,但可以满足您的需求,例如:
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();