我应该学习什么样的架构来制作好的基于JavaScript的软件?

时间:2010-09-25 18:20:26

标签: javascript html5

我很了解模型 - 视图 - 控制器,已经了解它多年,并在使用PHP等语言进行服务器端开发时使用它。

然而,我现在正在使用JavaScript并使用SVG,Canvas以及现代浏览器支持的其他强大功能构建一个大型应用程序。这个项目很大,所以它背后的架构一定不能脆弱。

JavaScript和MVC不像房子一样着火,因为JavaScript本质上是事件驱动的。那么,是否有任何架构或其他任何我应该学习,理解和实施的东西?

该软件必须处理数据。它已经利用了本地存储和Web SQL数据库。我需要一个模特,对吗?有UI,所以我有意见?但是,我有控制器吗?活动怎么样?我如何构建一切?

建筑,建筑,建筑 - 这就是我感兴趣的东西。我选择的语言很好。

7 个答案:

答案 0 :(得分:2)

首先,我是JavaScriptMVC的作者,所以我在各种方面都非常偏向。首先,你将在JS应用程序中做6件事:

  1. 加载脚本
  2. 回应用户事件
  3. 更新DOM
  4. 从服务器请求数据
  5. 将该数据转换为对JavaScript有用的内容
  6. 组织您的前端业务逻辑
  7. 您选择的架构可能取决于您想要/需要的工具。

    对于一般架构,我认为分离问题很重要。

    我强烈建议你找一些做依赖关系管理和客户端模板的方法。它们会让你的生活更轻松。

    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设计模式结合起来进行大规模开发,请查看:

http://boilerplatejs.org/

我是它的主要作者,并想到在开发少量大型javascript产品后分享我们获得的知识。它解决了以下主要问题:

  • 解决方案结构
  • 创建复杂的模块层次结构
  • 自包含UI组件
  • 基于事件的模块间通信
  • 路由,历史记录,书签
  • 单元测试
  • 本地化
  • 文档生成