这是一篇意译文, 翻译自 DHH( Rails 创始人 )在 Quora 上的 Rails 问题回复.
近期, 看得出社区里一些人对 Rails 发展失了一些信心, 我想为大家找回一些信心.
译者: 技术达人李亚飞, 现任百分之八十公司 CTO, 团队有 7 位全栈 Rails 工程师.
2004 年, 我们选择 Rails, 那么今年, 我们也会因为同样的原因选择 Rails.
越是事情变化, 他们越是保持不变.
这些年 JavaScript 世界有着大量的进步, 但我们也看到了倒退的世界, 而这些正在 Rails 前年就为大家解决掉了.
回到当年, J2EE 是商业复杂架构的首选, 后来的事, 大家都知道了: Rails, PHP 等轻量解决方案占了上风.
但是今天, 在 JavaScript 世界里, 问题竟与当年惊人的相似. 开发者花费数小时, 甚至数天, 只为完成一个基本框架的设定. 他们只是从各种库里找到自己的工具, 把它们组装起来, 从未满意过.
Rails 的核心原则非常独特, 虽然也一直有争议, 那就是约定大于配置. 有了它, 我们可以移除很多无意义的选择, 提供一个默认就非常先进的全栈 web 框架, 帮助人们构建先进完整的应用. 通过它, 开发者可以获得巨大的生产力.
众多所知, Rails 也因此而获取得巨大的成功. 不过令我惊讶的是, 在这点上, 世界上竟然没有多少同类的竞争对手. 今天, 大多数框架仅停留在给用户提供另一个点菜单, 另一个构建系统, 或者另一个视图库, 再或者另一个 ORM. 很少有框架是提供完整解决方案的.
我想, 就标题的问题来讲, 答案就是, Rails 的约定大于配置核心原则能够有效帮助开发者减轻选择轮子的痛感. 通过减少无意义的选择, 接受社区的约定, 和按照 web 开发中基本问题的约定, 你将变的更出色, 更高产. 少一些无意义的独特性, 不必关注最小剪裁, 这些东西根本没有意义.
无论如何, 这就是 Rails 核心原则的巨大吸引力. 我已经在其他地方进一步详细阐述了在Rails 核心原则中关于配置的约定方法, 以及点菜 / omakase冲突的说明, 和集成系统的吸引力以及 Rails 社区的其他核心价值. 笔者注: 可以到 DHH 博客里了解一二.
如果读过这些资料之后, 你应该能准确判断出 Rails 是否适合你了. 如果你还不能意识到其中的争议, 或者你只是不喜欢这些争议中提出的解决方案, 那么 Rails 技术的细节可能并不重要. 如果这些能够引起你的共鸣, 或至少对此你有兴趣, 请继续.
从 Rails 的这个核心原则之上, 我们构建了一个难于置信的无比强大的 web 框架, 它是实际用户需求驱动, 并且多范式设计, 满足大多数人需求, 并兼具一定自由度. 当人们听到 “web 框架”, 有时他们会想, “哦, 那只是一些生成 HTML 的东西, 是吗?”. 在这种看法下, 有的开发者可能认为这跟 React 之类前端框架是竞争关系. 我认为这或许有点关系, 但区别还是非常大, 如果因此而错失 Rails, 这个决策真的是因小失大.
正如我上面提到的, Rails 有一个雄心勃勃的终极使命, 那就是站在全栈的角度下, 帮助开发者处理好过程中的每一块代码, 从连接到数据库, 到 nosql 数据存储, 到业务模型, 到控制器, 直到最后, 输出 HTML. 实际上, 最后一步输出 HTML 仅仅是我们关注的很小一部分.
所以, 如果你认为客户端的 MVC 框架如 React, Angular 或者其他框架是未来, 你仍然是 Rails 的目标用户. 因为除了组装 HTML 外, 你在后端仍然需要大量的工作: 数据库存储, 业务模型, 计算事情, 将任务排队以供日后处理, 发送电子邮件, 触发推送通知以及所有其他的东西,真正的应用程序需要做的还有很多.
这才是 Rails 的核心所在: 处理 POST, PUT 或者 GET 请求之后的事情. 虽然 Rails 默认是全栈包括 HTML 端渲染, 并且我们缺省提供了 Turbolinks 和 SJR 供大家选择, 但如果这条路不那么有吸引力, 也可以很容易进行替换. 高效安全生成 JSON 数据同样是 Rails 追求的事情.
无论如何, 就在 2017 年, Rails 在这两条基本原则下仍然是远超其他框架的:
我们独一无二的约定大于配置的核心原则, 就算现在还有争议, 但它仍然像 13 年前一样为我们开发者提供着巨大的好处
我们有着一个从实际开发需求而来, 全栈的 web 框架, 当你使用 开始你的项目时, 它将为你提供无与伦比的生产力.
而且, 最为重要的是, 我已经把 “樱桃” 留下了. 现在就开始使用 Ruby 吧. 就算这些年是人们重新发现函数式编程和不变性数据理念价值的时代, Ruby 仍然是我遇到过最漂亮, 最奢华的语言.
相信我, 只需给你看几行代码, 我就能肯定你会爱上 Ruby.