Circuit、Element和Wire这三种对象类型的定义驻留在不同的物理组件(编译单元)中,以提高模块化程度。尽管这些单个类型的实现通过它们的接口完全封装,然而,每个部件的.c文件都必须包含其他两个组件的头文件,结果导致这三个组件的依赖图是循环的。也就是说,在没有其他两个组件的情况下,没有一个组件可以单独使用或测试。
草率构建的大型系统因为循环依赖往往会紧密耦合并且强烈抵抗分解。支持这样的系统会是一场噩梦,而且对其进行有效的模块化测试通常是不可能的。
电子设计数据库的一个早期版本是一个典型的例子。当时,该电子设计数据库的作者没有意识到在物理设计中需要避免循环依赖。结果得到一个相互依赖的包含了数以百计的类和数千个函数的文件集合,除了把它当作一个单独的模块外,根本无法使用,更无法测试。这个系统拥有极差的可靠性,并被证明无法实现扩展或者维护,最终不得不被抛弃并且重新编写。
相比之下,层次化物理设计(即没有循环相互依赖)相对易于理解、易于测试、便于增量式的重用。