将2个javascript对象连接在一起的正确方法是什么?

Jon*_*ess 16 javascript dependency-injection passive-view

我目前面临一个难题:将两个javascript对象连接在一起的正确方法是什么?

想象一下像文本编辑器这样的应用程序,它有几个不同的文件.我有一些HTML页面代表笔记本的视图.我有一个文件notebook.js,其中包含NotebookController和Notebook View的类定义.

NotebookControler对象负责在笔记本上执行业务逻辑,如"保存笔记本","加载笔记本","新笔记本".NotebookView负责管理用于演示的HTML.它做低级别的东西,如"获取/设置笔记本电脑主体""获取/设置笔记本名称".它还侦听DOM事件(onClick)并触发业务事件(saveNotebook).这是我对被动视图模式的尝试.

我希望我的javascript客户端代码是面向对象的,分离的关注点和单元可测试的.我想用模拟NotebookView测试NotebookController,反之亦然.这意味着我不能只在NotebookController中实例化NotebookView.我也是

  • 在我的notebook.js中放入一些逻辑,将2连接在一起
  • 在我的应用程序中有一个全局函数,它知道实例化其中一个并将它们连接在一起
  • 使用依赖注入,可以是本土的,也可以是SquirrelIoc

在Java中,选择是自然的:使用Spring.但这似乎不是JavaScript-y.什么是正确的做法?

Pet*_*ley 0

我会尝试尝试一下,但是在没有看到任何实际代码的情况下会有点困难。就我个人而言,我从未见过有人用 JavaScript 或 IoC 对 (M)VC 进行过如此具体的尝试。

首先,你要测试什么?如果您还没有看过,请观看YUI 测试视频,其中包含有关使用 javascript 进行单元测试的一些有用信息。

其次,当你说“连接该聚合的最佳方法”时,我可能只是将其作为带有控制器的设置器来执行

// Production
var cont = new NotebookController();
cont.setView( new NotebookView() );

// Testing the View
var cont = new NotebookController();
cont.setView( new MockNotebookView() );

// Testing the Controller
var cont = new MockNotebookController();
cont.setView( new NotebookView() );

// Testing both
var cont = new MockNotebookController();
cont.setView( new MockNotebookView() );
Run Code Online (Sandbox Code Playgroud)

但这对您如何设计控制器和视图对象做出了一些重大假设。