企业 Rails
2006 年 7 月 11 日
在新成立的 Rails 社区中,“企业”一词正在成为一个贬义词。对于许多人来说,Rails 框架及其积极的简单性,是过于复杂的 '企业级' 框架的对立面。
在最近的 RailsConf 上,PragDave 的开场 主题演讲 强调了 Rails 中的一系列未解决的问题,其中一些涉及处理这些企业级问题。一个例子是,他呼吁支持更多样化的数据库结构,例如具有复合主键。
DHH 对此的回应,不可能比更强烈的拒绝更强烈。通过巧妙地视觉操作他最近的连线封面,DHH 将自己投射为软件世界的 Neo,强有力地宣称自己处于一个更好的位置,并告诉企业界,他们需要加入他,而不是相反。将这一原则应用于复合主键,反应是“绝不可能”。Rails 将按照它自己的方式行事,并且不会为了支持它不喜欢的东西而使自己复杂化。
这是一个很好的例子,说明了是什么让 Rails 成为“有主见软件”。在 Rails 的思维方式中,如果你保持你的表与你的对象同构,并为你的表提供代理的、整数的、主键,那么生活就会简单得多。如果你按照 Rails 的方式玩——生活很容易;如果不是——使用其他东西。
我承认我喜欢这种有主见的态度。也许这反映了我的 Unix 背景,Unix 擅长于许多擅长做一件事的工具,而不是一个试图做很多不同事情的复杂工具。我喜欢 Rails 的专注,它决心选择某一类应用程序并很好地为其服务。
从这个意义上说,我看到了 DHH 和 Kent Beck 之间惊人的相似之处。对于他们中的任何一个人,如果你向他们展示一个受限的世界,他们会看看我们认为理所当然的约束,认为它们是不必要的,并创造一个没有它们的 世界。我没有这种品质,我倾向于尝试在约束内工作,逐渐推动它们,而他们只是在它们下面放一些智力炸药,然后继续前进。这就是为什么他们能够创造出像极限编程和 Rails 这样的东西,这些东西确实让行业震惊。
PragDave 的演讲背后,存在着更深层的担忧。像我一样,他一生的大部分时间都与那些无法使用炸药的人一起工作。当你需要从一个由数据管理组运行的数据库中获取数据,并且该数据库已经运行了十年,并且具有复合主键时,你不能仅仅戴上一副酷炫的太阳镜,然后炸毁约束。对此的一个答案是“改变你的组织或改变你的组织”,但对于那些不能改变的人来说,他们应该完全被 Ruby 抛弃吗?
最后一段的最后一个词是答案的关键。我认为 Rails 应该忽略企业界,但这并不意味着 Ruby 也应该这样做。像 Ruby 这样的脚本语言的一大优势是它们 后现代 的乐趣,在于潜入混乱的软件生态系统的泥潭。Ruby 是其他框架填补 Rails 观点留下的空白的绝佳场所。
我的同事 Badri 做了一个演讲,可惜没有多少人参加,关于其中一个——rBatis。rBatis 是流行的 Java 框架 iBatis(由另一位同事 Clinton Begin 领导)的 Ruby 移植版本。该移植工作由另一位同事 Jon Tirsén 完成。rBatis 仍在开发中,但它已经展现出使 iBatis 受欢迎的相同元素——无畏地拥抱 SQL 的力量,而不是仅仅试图将其隐藏在查询对象层之下。它还通过充分利用 Ruby 来增强其吸引力——从 Active Record(如验证)中窃取了许多函数,并使用方便的 Ruby 语法而不是 XML。(XML 是编程语言的驼背吗?)rBatis 可能是解决复杂数据库问题的答案,它仍然适合 Rails web 应用程序,但引入了不同的权衡。如果你对 SQL 感到满意,rBatis 看起来非常简单。(顺便说一句,悉尼的 Ruby 程序员们?如果 rBatis 的工作速度变慢,我们可能需要你绑架 Jon 的冲浪板。)
所有这些都改变了我们的视角。企业 Rails 可能是自相矛盾的,但企业 Ruby 绝非如此。事实上,当我看到企业界的发展方向——更多地使用消息传递、具有 应用程序数据库 的自主服务、对多样性的后现代接受——不会凝固的粘合剂 似乎是理想的工具。
虽然有些人认为这些演讲暗示着戴维斯之间出现了分歧,但进一步的对话让我认为任何分歧都是基于误解(现在这是一个混乱的隐喻)。PragDave 的呼吁不是让 Rails 支持这些东西,而是让更广泛的社区找到一种方法。同样,DHH 的回应是关于 Rails 核心团队的;这几乎没有限制其他人的努力——正如 rBatis 所证明的那样。此外,DHH 认为 PragDave 的大多数呼吁与核心一致。狭窄的核心 Rails 和更广泛的 Ruby 世界(包括 Rails)的概念支持这两种担忧——这是组合小型工具的优势。
然而,这种广泛的 Ruby/狭窄的 Rails 世界观有一个陷阱。我在主题演讲中开玩笑说,RailsConf 是 Rails 失败的标志——因为如果它真的成功了,Rails 会太简单,不需要一个会议。然而,潜在的真相是,Rails 已经成为 Ruby 中 Web 应用程序(甚至企业应用程序)的关键词。我怀疑我们会看到更多企业级人士参加 RailsConf,而不是参加 RubyConf,因为 Rails 已经引起了人们的注意。这样做的结果是,人们可能会将 Rails 的有主见性理解为关于 Ruby 的陈述,从而给人一种 Ruby 不适合企业级粘合剂的印象。那将是一件憾事。