如何在客户端上构建复杂的单页JS Web应用程序的结构?具体来说,我想知道如何以其模型对象、UI组件、任何控制器和处理服务器持久性的对象为基础清晰地构建应用程序。
MVC起初似乎是一种适合的选择。但是由于UI组件嵌套在不同深度(每个组件都有自己的处理或响应模型数据的方式,并生成它们自己可能或可能不直接处理的事件),所以MVC似乎无法得到干净的应用。(但如果情况不是这样,请纠正我。)
--
(这个问题导致了两个使用ajax的建议,显然除了最琐碎的单页应用程序外,其他需要使用ajax。)
如何在客户端上构建复杂的单页JS Web应用程序的结构?具体来说,我想知道如何以其模型对象、UI组件、任何控制器和处理服务器持久性的对象为基础清晰地构建应用程序。
MVC起初似乎是一种适合的选择。但是由于UI组件嵌套在不同深度(每个组件都有自己的处理或响应模型数据的方式,并生成它们自己可能或可能不直接处理的事件),所以MVC似乎无法得到干净的应用。(但如果情况不是这样,请纠正我。)
--
(这个问题导致了两个使用ajax的建议,显然除了最琐碎的单页应用程序外,其他需要使用ajax。)
PureMVC/JS的MVC架构在我看来是最优雅的。我从中学到了很多东西。我也发现Nicholas Zakas的可扩展的JavaScript应用程序架构对于研究客户端架构选项非常有帮助。
另外两个提示:
Question - What makes an application complex ?
答案 - 问题本身使用了“复杂”这个词。因此,常见的倾向是从一开始就寻找复杂的解决方案。
Question - What does the word complex means ?
答案- 任何未知或部分理解的事物。例如:即使在今天,对于我来说,重力理论仍然很复杂,但是对于在1655年发现它的艾萨克·牛顿爵士来说却不是。
Question - What tools can I use to deal with complexity ?
答案 - 理解和简单。
Question - But I understand my application . Its still complex ?
回答 - 三思而后行,因为理解和复杂性并不共存。如果你理解了一个非常庞大的应用程序,我相信你会同意它不过是许多小而简单单元的集成。
Question - Why all of the above philosophical discussion for a question on
Single Page Application (SAP)?
答案 - 因为,Question - What about the use of Frameworks ?
答案 - 框架是一些常见的、通用的模式的样板代码/解决方案,因此它们可以从应用程序开发中卸载x%的负担(变量,基于应用程序),但对于庞大且不断增长的应用程序,不应有太多期望。始终完全控制您的应用程序结构和流程是一个好习惯,但最重要的是控制其代码。应用程序代码中不应该有任何灰色或黑色区域。
Question - Can you suggest one of the many approaches to SPA architecture ?
回答 - 根据应用程序的性质思考自己的框架。将应用程序组件进行分类。寻找与您派生的框架相似的现有框架,如果找到,则使用它,如果找不到,则建议继续使用您自己的框架。创建框架需要付出相当大的努力,但从长远来看可以产生更好的结果。我SPA框架中的一些基本组件包括:
数据源:模型/模型集合
用于呈现数据的标记:模板
与应用程序交互:事件
状态捕获和导航:路由
实用程序、小部件和插件:库
让我知道这是否有所帮助,并祝愿您在SPA架构方面好运!!
我的应用程序构建方式:
只需选择一个JavaScript框架,并遵循其最佳实践。 我最喜欢的是ExtJS和GWT,但每个人的情况可能不同。
不要为此编写自己的解决方案。复制现代JavaScript框架所做的工作所需的工作量太大了。 改编现有的东西总是比从头开始构建快得多。
$
或 jQuery
命名空间下,包括 DOM 操作、网络、字符串修剪和第三方扩展,这是一个糟糕的设计。API 很混乱。但对于面向对象的应用程序来说,真正重要的是上下文管理。jQuery 事件处理程序的 this
是事件目标,而不是对象本身。没有第三个参数,比如 Array.prototype.map
中指定的上下文。因此,每个事件处理程序最终都会使用 Function.prototype.bind
或 $.proxy
。因此,它对于临时脚本是有限制的。 - saaj另一种选择:看看ItsNat
用JavaScript思考,但在服务器上以相同的DOM API使用Java编写代码,这样更容易管理您的应用程序,因为UI和数据在服务器上是一体的,无需自定义客户端/桥接。