Javascript 主干设计相关的模块化关系

Javascript 主干设计相关的模块化关系,javascript,unit-testing,design-patterns,backbone.js,Javascript,Unit Testing,Design Patterns,Backbone.js,我正在建造一个庞大的主干网。然而,我遇到的一个压力点是: 模型A需要集合A 集合A需要模型A 这是一个标准的循环依赖性问题。 然而,大多数建议是设置一个顶级项目来管理这些(我目前使用的)。这也使得单元测试非常困难,因为程序必须引入每一个模型和集合来管理它 有没有更好的方法来管理这样的场景?在这种情况下编写单元测试的一种方法是模拟正在使用的模块加载框架中的依赖关系的另一面。如果RequireJS是您选择的工具,那么我使用SquireJS已经取得了一些成功: 也就是说,一旦建立起来,它就是一个

我正在建造一个庞大的主干网。然而,我遇到的一个压力点是:

  • 模型A需要集合A
  • 集合A需要模型A
这是一个标准的循环依赖性问题。 然而,大多数建议是设置一个顶级项目来管理这些(我目前使用的)。这也使得单元测试非常困难,因为程序必须引入每一个模型和集合来管理它


有没有更好的方法来管理这样的场景?

在这种情况下编写单元测试的一种方法是模拟正在使用的模块加载框架中的依赖关系的另一面。如果
RequireJS
是您选择的工具,那么我使用SquireJS已经取得了一些成功:

也就是说,一旦建立起来,它就是一个黄蜂巢。我们放弃了这种测试技术,因为很难对实际测试的内容进行推理


(旁白:不想做傻子,但像这样的循环依赖通常是设计问题的症状。模型必须了解集合的用例是什么?

这样我才能执行嵌套属性。比如说,我有一个模型(用户)、一个模型(概要文件)和一个集合(概要文件)。假设一个用户可以有许多配置文件。如果用户有多个配置文件,则嵌套配置文件很容易,但嵌套起来有点困难(但我找到了一种方法)。问题是:概要文件需要用户(这样它才能创建),用户需要概要文件(这样它才能创建),概要文件需要概要文件……我明白了——这是有道理的。如果您正在寻找替代方案,我建议更改设计,使
配置文件
不会直接创建
用户
,而是要求在做任何有趣的事情之前向其提供
用户
实例。然而,与此同时,在测试
配置文件
时,可以使用Squire模拟
用户
模型定义,在测试
用户
时模拟
配置文件
定义。希望答案有帮助!我完全同意改变它。我从来都不喜欢我正在做的设计。但我还没有找到更好的方法:/你的回答并没有真正表明除了通常的“不要这样做”。我在寻找更多有助于解决这一问题的实用建议和模式。