Aura:一个事件驱动、可扩展的JS架构

Aura 是一个事件驱动的、可扩展的架构,它将你的代码包装成通信便捷的可复用组件或扩展。Aura 可以很好地配合已有的框架如Backbone.jsEmber,但Aura本身是框架无关的,适用于很多开发可维护应用的“最佳设计模式”。

Aura对流行的工具,如BowerGruntYeoman 支持得很好,内部使用如RequireJS 的库(暂时是)。鉴于ES6的modules及Polymer 等解决方案正在变得稳定可靠,以后会转向这些。

组件

组件应该是是原子性的,具有明确职责的。一个微应用可以在你的应用的任意部位实例化(可能不止一次)。你可能不太习惯这样思考,而是更偏好建立一个高耦合的应用。一开始这样可以工作得不错,不过一旦它变得复杂,你可能会遭遇麻烦。因此在下一次你开始开发一个更大的项目,停一下,尽力先确定可能的组件。

考虑如网站这样的例子:

将你的应用划分为更小的部分对于保持体系的干净、可复用性以及大体上的可维护性至关重要。这样的原则是计算机科学中很著名的概念:“分而治之”。把一切分割为更小的、复杂度更低的部分,有利于测试,并减少麻烦。然后把它们组织到一起构成你的更大的应用。

但是等等,我的组件之间需要通信!

你的应用中的Aura组件需要互相通信。这样的通信造成了依赖,如果组件A需要调用组件B的操作方法,那么A中需要一个对于B的引用,对吧?好吧,这并不是必要的,因为这样可能会再次将这些组件耦合在一起,你就无法做到在不改动组件A的情况下随意地切换模块B

因此,创建模块结构的一个习惯性做法是,通过事件广播机制将模块间的通信解耦。Aura自带的全局的以及模块级别的消息传递模式,使这变得轻而易举。

一个快速的例子

它是怎样工作的?

为了建立你的应用,可以使用data-aura-*的属性,通过AuraJSHTML API装配你的组件。

我们来做个示范。假设我们打算开发一个GithubIssues应用。我们需要做:

  • 显示来自特定仓库的issues列表
  • 过滤这些issues

现在我们来写一写些组件,但首先我们需要一个与Github的API通信的途径。

Here is a simple AuraJS extension that does just that:

这是一个可以实现该目的简单的AuraJS扩展

extensions/aura-github.js

这个扩展向我们所有的组件提供了与Github API通信的this.sandbox.github方法。

在你的aura应用中使用它:

app.js

现在,我们来写issues的组件:

aura_components/issues/main.js

现在我们可以通过使用Aura基于data-attributesHTML API将这个组件放到应用中的任意位置。this.options.filter和this.options.repo可以通过 data-aura-repo和data-aura-filter属性传递给我们的组件。

你甚至可以在页面中拥有该组件的多个实例:

这些组件将会响应任何其他组件触发的issues.filter事件。例如在另一个允许用户过滤issues列表的组件中,我们可以这样写:

你可以在这看到一个基于AuraJS 及一堆Github组件Github客户端示例

贡献

我们非常欢迎你以feedbackbug报告或者最好是pull request的形式为这个项目作出贡献。现阶段我们的主要精力集中在提升AuraJS的稳定性上。如果要提交新特性的请求,请注意这一点,我们更乐意在未来的版本中考虑它们。

提交Issue

为了让我们帮助到你,请检查你已完成以下步骤:

  • 确保你在master的最新版本
  • 使用搜索功能以确保之前没有报过这个bug
  • 给予我们尽可能多的关于这个bug的信息,包括如你得到的一切输出,你使用的的操作系统及版本
  • 如果提交一个bug报告,请提交一份可以重现你的issue的测试用例,使用(jsFiddle.net)[http://jsfiddle.net/] 或者 (JS Bin)[http://jsbin.com/]。即使做不到,我们会尽力援助,但是请明白,这样做会大大有利于我们提供帮助。

Pull Request 指南

  • 请检查并确保没有已存在的pull request指向你所提到的issue。另外我们建议在追踪器上检查相关的issue,一个团队成员可能会在分支或fork的仓库上解决这个issue
  • 较大的改动必须首先在issue中进行讨论。
  • 在针对主题的分支上进行开发,而不是master上。
  • 添加可以覆盖改动的相关测试。
  • 压缩你的commits
  • 给你的PR写一份有说服力的描述及我们应该采用它的原因
1 收藏

资源整理者简介:nighca

(新浪微博:@nighca) 个人主页 · 贡献了1个资源 ·   


直接登录

推荐关注

按分类快速查找

关于资源导航
  • 伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1440 项工具资源。
    推送伯乐头条热点内容微信号:jobbole 分享干货的技术类微信号:iProgrammer