6

当我第一次开始研究 Rails 和 Django 时,我被 Django 开发人员带离 Rails,他们认为 Rails 是一个使用过多“魔法”(泄漏抽象)的黑盒子。在进一步探索 Rails 时,我想知道这是否是基于不知道如何在不使用脚手架的情况下在 Rails 中实现自定义的不知情假设。脚手架本身似乎隐藏了很多东西,但是一旦您了解了如何在没有它的情况下创建项目,Rails 似乎与 Django 一样具有高度可定制性。这是我的误解还是 Rails 的“魔术”批评者的误解?

4

6 回答 6

10

Rails 广泛使用 Ruby 的元编程工具来为您完成大量繁重的工作,但这并没有什么神奇之处——最终它只是代码,只要有足够的时间和精力就可以理解。

脚手架始终旨在作为一种快速启动和运行模型的方式来执行 CRUD 操作。目的始终是应该用您的真实生产代码替换脚手架。

于 2009-01-17T18:21:52.477 回答
5

我不会接受 Pythonista 对 Rails 的建议,就像我不会接受 Rubyist 对 Django 的意见一样,除非他们至少能证明对这两个平台有合理的理解水平,而且很少有人能做到。

这些框架(就我对 Django 方面的有限理解而言)具有相似的架构,但发展方式不同,并利用了不同语言的优势。

我同意 Rails 具有相当多的“魔力”,而且约定优于配置是框架的很大一部分。我可以看出这对 Python 专家来说可能是多么令人反感,这可能是公平的——Ruby 的相对优势之一是使魔法发生的元编程能力。也许正因为如此, Python 中的猴子修补通常被视为可疑,而在 Ruby 中则很常见。没有更坏的东西,只是不同。

老实说,我认为您可以在任何一个平台上都玩得很开心。我建议您花两三天时间为每个应用构建一个简单的应用程序,然后选择您最喜欢的应用程序。我很想看看你选择的反馈和原因。

于 2009-01-17T18:57:39.907 回答
5

你认为 Merb 是什么?这是 Rails 开发人员反抗 Rails 中过多的魔法的旗帜。

Rails 3 试图减少魔法,引入 Merb 的许多部分,并进行清理。

现在魔法真的太多了吗?也许吧,但请记住这一点。Rails 基本上是 DSL(领域特定语言)的集合,它们作为 Web 开发的框架组合在一起。这就是它如此干净的原因,它是一种用于路由、模板或 ORM 等的语言。要制作干净的 DSL,您必须扩展 Ruby,这需要一些魔法或元编程。

Django 不这样做,它不会是 Python 的方式。没有好坏之分,只有明显不同。

现在你问,Rails 中是否有太多的魔力?

记住Arthur C Clark 的第三预测定律:任何足够先进的技术都与魔法无异。

所以也许你的那个开发者朋友只是说 Rails 技术太先进了,他们用起来不舒服。

对我来说,我可以阅读 Rails 的源代码并弄清楚发生了什么。当然它在某些地方很复杂,但我总是能够浏览源代码,阅读非常广泛的单元测试,并知道它是如何工作的。内核也非常复杂,但我们不会因为这些理由而拒绝使用它,不是吗?

于 2009-01-18T03:36:27.740 回答
2

您可能会发现花一些时间阅读过去对这个问题的变体的答案很有用(例如,我在这里解释了我的看法)。

于 2009-01-18T03:51:06.210 回答
1

我不明白如何将导轨视为黑匣子。你有来源。一些红宝石有点棘手,元编程可能会使事情难以追踪,但一切都在那里供您查看。再加上脚手架的批评是没有意义的,除非他们谈论的是旧的脚手架,而不是生成的脚手架,后者只是创建了非常基本的代码模板,可以在那里看到。

我猜 djangoist 并非不知情,但他们确实意味着其他东西,比如 rails 使用了太多棘手的 ruby​​,并且通过猴子修补 ruby​​ 类来踩踏一些不应该的东西。这是一个可以成立的案例。

当然,他们真的不应该说坏话,因为我很确定 Django 在澳大利亚吃婴儿。

于 2009-01-18T03:02:53.143 回答
1

我认为“公平”的概念在这里是错误的。这完全是口味问题。我很震惊 Rails Monkey 修补了 ruby​​ 的内置类型(导致像“5.days”这样的东西)。我认为这是魔术。一些 ruby​​ist 可能会认为它是可靠的工程。

我认为说 Rails 对您的语言运行时做了很多不明显的事情是客观的。如果您认为这是好是坏取决于您。

于 2009-01-18T11:31:32.053 回答