2015 年 6 月 2 日星期二

Git 仓库结构更新

维护任何复杂项目时面临的主要挑战之一就是组织,DataTables 也存在此类问题。该项目主要分为核心库、扩展和插件。此类添加 DataTables 功能的模块化方法行之有效,但在目前,困难之处在于与 DataTables 支持的多种样式库集成。

DataTables 提供其自带的样式表,但它还可以利用 BootstrapZurb FoundationjQuery UI ThemeRoller 提供的样式。此种由多种不同框架设置样式的能力是 DataTables 的基本内容,应该尽可能简化在这些环境中使用 DataTables。

目前不是这样 - 但此文章将讨论如何解决此问题以及即将发布的 DataTables 版本。如果您一直在发掘众多的 DataTables Git 仓库,您可能已经看到部分这些更改 - 此博客文章将明确说明这些更改是什么以及进行这些更改的原因。

我期望此博客文章作为在更新 DataTables 及其所有扩展时参与工作的参考和指导文档,因此它相对“枯燥无味”,但这儿提出的工作确实构成了 DataTables 未来发展的一个关键部分。

目前状态

目前,为了将 DataTables 与任何受支持的样式库配合使用,您需要将所需的 JavaScript 库包含在您的代码中,还需要包含用于您样式库的 DataTables 集成文件

集成文件通过在 JavaScript 文件中设置默认值并调整样式库选项以匹配 DataTables 的需求来发挥作用。

此类方法通常十分有效,这从 DataTables 支持三个完全不同的样式库和它本身的默认样式这一点便可见一斑。但是,此类方法经常出错的两个地方是

  • 对于使用此软件的开发者,既包含默认的 DataTables 样式又包含集成样式并不总是明确的
  • 对于更新集成文件的 DataTables 开发者,此种方法是分散的并且未针对各种扩展版本发布特定信息。例如,针对 TableTools 的 Bootstrap 集成嵌入在通用集成文件中,因此它可能无法与 TableTools 同时更新,或者发布信息可能不同步。

解决方案

解决方案是将每个组件的集成选项移至其主机库,并提供一套文件名称应遵循的规则。此举可确保开发者能够立即访问他们需要更新的软件、发布版本是原子化的,并存在一种针对每种样式库包含所需文件的一致方法。

此类方法的缺点是,如果您使用许多扩展,它会大幅增加所需的文件数量。但是,一致的命名提供了以编程方式合并文件的能力,此类问题将被此类优点所掩盖 - 在未来的博客文章中将对此主题进行进一步探讨!

在本文余下的内容中,我将仅仅关注仓库文件结构的枯燥细节。

文件名规则

  1. 文件名为层次结构,最左侧为最重要的软件名称
  2. 每个插件都将它自己的函数名添加到层级结构(最右侧),除非它与层级结构中的前一个项目相同
  3. jQuery 位于层级树的顶部
  4. 层级结构以点分隔
  5. 文件名仅限于层级结构中的最后两个元素。
  6. 样式框架集成文件在层级结构中将框架名追加为最后一个元素
  7. DataTables 提供的样式也算作一个框架(JavaScript 默认值适用于其样式框架,因此永远不需要 JavaScript DataTables 集成文件!)
  8. 扩展 .min 用于表示经过精简的文件(在文件扩展名前追加)
  9. 文件名将始终具有扩展名(例如 .css.js)。
  10. 文件名采用 camelCase 格式 - 即除两个单词已合并之外,全部采用小写

示例 - DataTables

考虑 DataTables 的示例 - 它是一款 jQuery 插件,因此它的主 JavaScript 文件被称为 jquery.dataTables.js。Bootstrap 集成文件将被称为 jquery.dataTables.bootstrap.js,但规则 5 会将其截断为 dataTables.bootstrap.js。因此 DataTables JavaScript 目录将包含

  • jquery.dataTables.js
  • dataTables.bootstrap.js
  • dataTables.foundation.js
  • dataTables.jqueryui.js

用于样式的 CSS 文件与集成文件类似,因此我们拥有

  • jquery.dataTables.css
  • dataTables.bootstrap.css
  • dataTables.foundation.css
  • dataTables.jqueryui.css

示例 - 响应式

现在考虑 Responsive 扩展。对于响应式,不需要 JavaScript 集成文件,因此我们只需拥有

  • dataTables.responsive.js

对于 CSS,我们需要集成文件,因此我们拥有

  • responsive.dataTables.css
  • responsive.bootstrap.css
  • responsive.foundation.css
  • responsive.jqueryui.css

存储库状态

在撰写此帖时,仅 DataTablesSrcFixedColumnsResponsive 存储库已更新以符合这些新规则。

随着 DataTables 的持续开发,其他存储库将很快跟进。