我很了解模型 - 视图 - 控制器,已经了解它多年,并在使用PHP等语言进行服务器端开发时使用它。
然而,我现在正在使用JavaScript并使用SVG,Canvas以及现代浏览器支持的其他强大功能构建一个大型应用程序。这个项目很大,所以它背后的架构一定不能脆弱。
JavaScript和MVC不像房子一样着火,因为JavaScript本质上是事件驱动的。那么,是否有任何架构或其他任何我应该学习,理解和实施的东西?
该软件必须处理数据。它已经利用了本地存储和Web SQL数据库。我需要一个模特,对吗?有UI,所以我有意见?但是,我有控制器吗?活动怎么样?我如何构建一切?
建筑,建筑,建筑 - 这就是我感兴趣的东西。我选择的语言很好。
答案 0 :(得分:2)
首先,我是JavaScriptMVC的作者,所以我在各种方面都非常偏向。首先,你将在JS应用程序中做6件事:
您选择的架构可能取决于您想要/需要的工具。
对于一般架构,我认为分离问题很重要。
我强烈建议你找一些做依赖关系管理和客户端模板的方法。它们会让你的生活更轻松。
JavaScriptMVC使用分层MVC方法,该方法主要基于自定义UI事件和OpenAjax事件。
我使用$.Controller构建我的低级小部件,其方式与构建jQuery小部件的方式类似。最大的区别是小部件产生了一个顶级控制器可以监听的非ui事件。例如,标签小部件可能会生成“tab.activate”事件,如:
$('.tab').trigger('tab.activated')
然后,我的高阶控制器可能会监听tab.activated事件,而模型会更新标签内容,如:
".flickr tab.activated" : function(tabEl, ev){
Flickr.findAll({type : "rainbows"}, function(images){
tabEl.html("//path/to/view", images );
}
}
Flickr.findAll本质上是对flickr消息进行查询,然后使用图像列表回调。使用模型包装service / ajax功能使它们更具可重用性。
您会注意到在回调中我使用视图中呈现的内容更新了tab元素的html。这可能不是“最好”的做法,但我想要一个简单的例子。更好的方法是将标签控制器传递给渲染的输出,以便它可以用它做它将要做的事情。这样,如果你的标签有一天想要淡入内容,那么它就能够和你的主控制器不必知道标签的实现。
最重要的是将您的应用分解为最小的部分。让它们单独测试(和灵活),并在您按照您的应用程序运行时将小部件组合成更大的部件。
答案 1 :(得分:1)
看看Ext JS。它具有干净的架构,非常适合高度复杂的JavaScript应用程序。
数据处理和服务器通信通过商店完成。数据呈现通过网格(使用单元格内部编辑器)和表单(具有丰富的表单控件集)完成,这些表单可以与商店进行通信。还有一组布局类来抽象CSS定位(边框布局,框布局,表格布局,表格布局......)。
然而,它不是典型意义上的MVC。该库鼓励编程风格,避免处理HTML和CSS,让你(大部分)生活在纯粹的JavaScript领域。您最终会考虑组件和数据,而不是单个dom元素和样式规则。如果您不喜欢这种方法,请注意,您不会喜欢这个库。
答案 2 :(得分:0)
在我看来,MVC仍然是要走的路。如果你正在寻找一个好的框架来帮助你减轻痛苦,我会看JavaScript MVC,它有模型,视图,控制器,单元测试,jQuery支持等。
答案 3 :(得分:0)
您应该了解客户端JavaScript的基于事件的特性以及它如何与基于MVC的服务器端应用程序融合。
您还应该学习如何在基于Prototype的Javascript继承结构中正确编程。
这些内容都允许您为JavaScript编写代码,以便它与您的服务器端应用程序框架相结合,并且是可扩展和可重用的。
答案 4 :(得分:0)
我在javascript编程中学到的一件事就是编写UnObtrusive Javascripting,它基本上意味着从行为(JAVASCRIPT)中尽可能多地分离结构(HTML)和样式(CSS)。
答案 5 :(得分:0)
Althogh不是原始的javascript解决方案,请看一下MVC的jQuery架构CoreMVC。
CorMVC是一个jQuery驱动的 模型 - 视图 - 控制器(MVC)框架 这有助于发展 单页,基于Web的应用程序。 CorMVC代表仅限客户要求 模型 - 视图 - 控制器和设计 尽可能低的入口点 了解单页应用程序 建筑。它并不预先假定 任何服务器端技术或网络 任何类型的服务器,并要求不 起床不仅仅是一个网络浏览器 运行
答案 6 :(得分:0)
如果您想要一个现成的参考架构,它将Soem行业领先的JS库与一些优秀的JS设计模式结合起来进行大规模开发,请查看:
我是它的主要作者,并想到在开发少量大型javascript产品后分享我们获得的知识。它解决了以下主要问题: