MVC应用的数据建模(基于Dojo)
本文翻译自: http://dojotoolkit.org/documentation/tutorials/1.7/data_modeling/ MVC,即模型(Model),视图(View)和控制Controller),是当今应用开发的主导模式。这里,我们要从Dojo的基础功能出发,来看看Dojo是如何支持MVC应用的。通过这篇文章我们会了解到如何通过Dojo的object stores 和 Stateful objects(有状态的对象)来构建MVC应用,以及如何基于这些模型实现我们的显示层和控制层。 MVC应用的数据建模(基于Dojo)MVC模式是当今应用开发的主导模式。该模式主要目的是组织严密的,易于管理的的代码结构。Dojo控件库自身的代码结构就是高度基于MVC模式的,同时也能很好的支持那些基于MVC模式的应用。一个好的MVC应用的核心是它能拥有一个完美的数据模式。接下来我们会介绍一下如何通过Dojo的Object stores和stateful objects(有状态对象)去构建一个包含view和controller的完美模式。 ModelModel层是MVC中的“M”,数据层指的是那些应用中需要访问和处理的核心数据信息,他是一个应用的中心,viewer和controller层则主要用来作为用户和Model(数据)层之间交互的一个桥梁。Model层则封装了存储和验证的过程。 Dojo的object store完美的担当了Dojo应用中Model的这一个角色。store的接口就是按照分离出数据层的思想来设计的。不同的存储媒介基于相同的store接口。Stores本身也支持扩展更为强大的功能。接下来我们来看看如何构建一个基本的store。我们将使用一个JsonRest的store,同时缓存住我们取到的数据: 我们的视图层(viewer)便可以开始查询结果了: 数据绑定MVC里面比较重要的一块就是view层应该监听数据层的改动,然后及时的反应在界面上。这种方式避免了用controller去监听数据层的无畏的资源开销。Controller只需要更新model层,viewer会自动将该改动反映到应用的界面上。我们能够通过dojo/store/Observable来实现这一点。 现在我们viewer已经能够即时的反映model数据的变化了,与此同时,我们的controller相关代码也能够基于用户的操作来对model数据作出相应的修改。Controller可以通过 数据模型进阶之前我们用到的store都非常简单,没有包含任何逻辑(可能服务端会包含一些逻辑和验证)。我们其实可以在不影响其他模块的同时对store加入一些额外的功能。 验证验证功能便可作为store的一个扩展,这个扩展对JsonRestStore来说非常简单,因为所有的更新都会调用 Hierarchy层次结构如同我们给我们的数据模型加入逻辑功能一样,我们也为元数据加入了一些特有的含义,其中之一就是层次结构。object store定义了 stored objects可以存放一个指向其所有子对象的数组引用。这种做法适用于小的,顺序的列表数据。同样,objects也可以存放一个指向其父对象的引用,这种做法伸缩性更强。 为了实现第二种数据结构,我们可以加入 有序的Store默认情况下,一个store通常是一群无序对象的集合。尽管如此,我们还是可以实现store的有序排列,尤其是对象集合中已经存在预留的隐含的序列属性时。实现有序store的第一个工作就是在调用 有序的Store通常还有一个需求,就是其元素能够前后移动,甚至直接到最前或者最后等等。我们可以通过 事物事物是应用程序里面比较重要的一块,通常用于把一系列应用的逻辑操作绑定到一起,一次性执行。他的作用之一就是集合一系列操作然后通过单一请求一次性提交,示例如下: 数据绑定: dojo/StatefulDojo对集合层次和实体层次的数据模型有一个清晰的界限,Dojo的store提供了集合层次的模型,接下来我们来看看实体层次的对象模型。Dojo对独立的对象也使用了统一的接口。这里我们可以使用
和之前介绍的viewer绑定数据一样,他能及时反映相应的数据变化。首先,我们先创建一个viewer,绑定到一个对象: 现在我们如果通过controller代码修改这个对象,在viewer上就会马上反映出来。 接下来我们还要记住将修改了的对象传回store里面,如下: 总结通过使用Dojo的store架构和stateful(有状态的)接口,我们便有了构建我们MVC应用的利器。Viewers能监听数据的变化。Controllers能通过统一的接口来操作数据而不用知道数据的特殊结构,同时也不需要额外的代码来操作viewer的变化。集合和实体的接口边界清晰。所有这些都能帮助您构建您自己的MVC应用。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- postgreSQL远程连接出现:Error connecting to server :致命
- 在手机上运行React Native
- ruby-on-rails – 如何使按钮在erb中作为链接工作?
- ruby-on-rails – 在rails中直接编写SQL查询是一个好习惯吗
- c# – Oracle托管驱动程序可以正常使用异步/等待吗?
- cocos2d-x 编译不同版本VS的项目 检测到_MSC_VER的不匹配项
- 带ARC的Xcode 4.2:即使在固件版本低于5.0的iOS设备上,我的
- TMS320F28335
- ajax --- jquery + php 代码整理
- ruby – 在rails之外使用rails方法