当前位置:嗨网首页>书籍在线阅读

05-Model不做什么

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

5.1.3 Model不做什么

Model不需要浏览器。这意味着Model不可以假定存在document对象,或者存在像document.location这种浏览器特有的方法。让 Shell 和(尤其是)功能模块来表示Model的数据,是“干净的”MVC。这样的分离使得自动化单元测试和回归测试变得更为简单。我们发现,当需要和浏览器开始交互时,自动化测试的价值就会大大降低,因为实现成本上升了。但通过避免DOM,我们可以测试除了UI之外的所有东西,无需运行浏览器。

单元测试和回归测试

开发团队必须决定何时投入自动化测试。对Model的API进行自动化测试几乎总是一项很好的投资,因为对于每个API调用,这些独立的测试可以使用相同的数据。由于有很多不易控制或者不易预测的变量,对UI的自动化测试要昂贵的多。比如,模拟“用户点击一个按钮然后又点击另外一个”的速度有多快,或者是预测当有用户进入时数据是如何在系统里面传播的,或者是想知道网络会有多快,都是很困难又昂贵的。为此,网页测试经常是手工进行的,有些辅助工具,像HTML验证器和链接检查器(link checker)。

一个精心设计的单页应用有独立的Data、Model和功能模块(视图+控制器)层。我们确保Data和Model有定义明确的API,并和功能模块隔离,结果是不需要浏览器就可以测试这些层。相反,可以使用JavaScript的执行环境,像Node.js或者使用Java编写的Rhino,来进行开销不大的自动化单元测试和回归测试。依据我们的经验,视图和控制器层,仍然最好由真人进行手工测试。

Model 不提供通用的工具方法。相反,我们使用不需要 DOM 的通用工具方法库(spa/js/spa.util.js)。我们给这些工具方法单独打包,因为需要在多个单页应用中使用它们。另一方面,Model通常是为特定的单页应用量身定做的。

Model不直接和服务器通信。这有一个单独的模块,叫做Data。Data模块负责从服务器获取Model需要的所有数据。

现在对Model在架构中的角色已经有了更好的理解,我们来创建本章需要的文件。