apache-flex - 需要对 MVC 的模型方面进行一些说明

标签 apache-flex actionscript-3 model-view-controller dto robotlegs

我想我需要对一些与模型相关的概念进行非常好的解释。

  1. 一般来说,如 Robotlegs 等框架所描述的模型扮演应用程序状态持有者或域状态持有者的角色吗?我最初认为模型完全是基于域的,即 UserModel、LocationModel,它们扮演的角色与 DAO 类在服务器上扮演的角色相同。不过,我查看的源代码越多,我看到的东西就越多,例如 UserAccountModel、ShoppingCartModel 等,它们充满了与客户端应用程序状态相关的属性和方法,而不是域状态。

  2. 我看到人们不会费心向 VO 类添加复杂的关系,即如果用户有很多照片,照片集合显然会从 UserVO 类中省略。相反,根据使用用户 ID 的服务调用,只要有必要,就会从服务器加载一堆 PhotoVO 对象。这是某种经验法则吗——一般来说,尽可能让 VO 保持“裸露”?这不会增加必须对服务器进行调用以获取所有数据的可能次数吗?此外,这通常不会分割领域模型吗? (服务器上的实体 User 类将始终具有 photos 属性)

  3. 由于对服务器的调用如此之多,获取一些可能已经在客户端存储中的对象是正常的。创建客户端缓存是否有意义,并检查要获取的对象是否已经存在,或者一般来说,再次获取它的开销将通过获取完全同步对象的好处得到补偿从服务器。否则,当发生更改时,必须关注存储在客户端缓存中的每个对象。我个人认为从服务器获取对象的开销并不大,之前可能已经获取了该对象。我会说,最好有最新的同步数据。

最佳答案

我认为您的问题无法回答,因为很多答案都是“视情况而定”。这取决于您正在构建的应用程序和 UI 的需求。

我不太明白您对“域状态”和“应用程序状态”的区分。但是,我认为在 UI 中实现的任何“值对象”样式类都应该专注于保存特定 View 的状态。单个 View 与数据库表是一对一关系的情况极为罕见。因此,我的 UI 数据对象可能与服务器端数据对象不同。虽然,使用 AMF 将 UI 对象映射到服务器端对象是很常见的。但是,这并不意味着 UI 中的每个对象都在服务器端实现,并且每个服务器对象都在 UI 上实现。

I see that the people do not bother to add complex relationships to the VO classes,

我不确定你在哪里看到的;我经常会这样做。但是,这取决于 View 应该显示什么。如果 View 没有显示大量与用户相关的照片,那么我不会进行远程调用来检索包含所有照片的用户信息。

With so many calls to the server, it is normal to fetch some objects that might be already on the client storage.

这取决于。我会说我写的应用程序,对服务器的调用都是按需完成的;并尝试酌​​情限制它们。如果我已经获取数据并将其缓存在客户端上,那么我将尝试使用该缓存而不是再次检索数据。

我将重申我最初的评估:我认为您的大部分问题的答案取决于具体情况,并取决于应用程序。您似乎从关于事情如何完成的总体概括开始。但是,我不相信它们是普遍真理。开发人员一直在为应用程序架构问题而争论不休。

关于apache-flex - 需要对 MVC 的模型方面进行一些说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6803964/

相关文章:

java - 如何计算我的应用程序中特定事件的耗时?

Java:MVC 和 Controller 的匿名类

java - Adobe flex 与 Java 通信的最佳方式是什么?

actionscript-3 - 弹性/AS3 : how to manage re-draw of chart when changing multiple chart properties?

java - 从java返回一个值对象给flex,它包含两个字符串数组作为它的属性

actionscript-3 - 在 AS3 中为垃圾收集器卸载对象

actionscript-3 - ActionScript 3.0 声音不起作用

javascript - 模拟点击还是手动设置模型属性?

ruby-on-rails - AsyncTask :Class 的未定义方法 `handle_asynchronously'

apache-flex - 如何将flex与mysql连接?