如何解决循环引用问题,比如类A将类B作为其属性之一,而类B将类A作为其属性之一?
如何做架构师来解决这些问题?
以NHibernate为例,对象之间将存在父子关系。
它如何处理这些父子场景?
发布于 2011-08-04 00:14:53
在大多数情况下,当我不得不让两个对象相互引用时,我会创建一个接口来删除循环引用。例如:
之前的
public class Foo
{
Bar myBar;
}
public class Bar
{
Foo myFoo;
}依赖关系图:
Foo Bar
^ ^
| |
Bar FooFoo依赖于Bar,但Bar也依赖于Foo。如果它们位于不同的程序集中,您将在构建时遇到问题,特别是当您进行干净的重新构建时。
之后的
public interface IBar
{
}
public class Foo
{
IBar myBar;
}
public class Bar : IBar
{
Foo myFoo;
}依赖关系图:
Foo, IBar IBar
^ ^
| |
Bar FooFoo和Bar都依赖于IBar。没有循环依赖,如果将IBar放在自己的程序集中,那么Foo和Bar位于不同的程序集中将不再是问题。
发布于 2011-08-03 22:51:02
我会告诉你的朋友他需要重新考虑他的设计。像您所描述的循环引用通常是设计缺陷的代码味道。
发布于 2011-08-03 22:52:51
与C++不同(例如),C#不需要转发声明来解析循环引用。因此:
public class A
{
public B B { get;set; }
}
public class B
{
public A A { get;set; }
}然而,这通常是一个有问题的设计决策的指标。
https://stackoverflow.com/questions/6928387
复制相似问题