Rails 初体验:Convention over configuration——Django VS Rails
作为一个初学者,在学习Rails的向导上,我是完成根据huasalee的《如何从零开始学会 Ruby on Rails?》来的,目前正在进行第四步,即通过学习Rails Guides来实现Blog系统。
在这个过程中,我逐渐开始摆脱Python/Django思维,开始用Ruby/Rails进行思考。于是,我想在还是Python/Ruby/Django/Rails混合思维的阶段,写一篇Rails初体验。
每个框架(或语言)都有其设计思想(或设计哲学),对Django来说,引用其网站上的一句:Django focuses on automating as much as possible and adhering to the DRY principle。
然而,在接触了Rails之后,我不得不说,Rails将automating及DRY贯彻地更加彻底,用Rails的话来说:convention over configuration,中文:约定优于配置。
举个简单的例子。在Django 1.3之后引入了「Class-based view」,有「ListView」和「DetailView」。在这个例子中:https://docs.djangoproject.com/en/1.3/topics/class-based-views/#generic-views-of-objects,Django的「ListView.as_view(model=Publisher,)」不需要指定去render哪个template,而是自动去使用了「/path/to/project/books/templates/books/publisher_list.html」这个模板。这即是convention over configuration的一个典型示范。优先使用默认的约定,而不是非要明确的指定要render的template。
但是Django没有像Rails一样将这个规范彻底的贯彻起来,如果遇到稍微复杂一点的场景,比如需要自定义一个View,那么需要subclass TemplateView,并详细指定template_name才行。另外,在route方面,Django也是需要显式的将URL Pattern与View对应起来的。
那Rails是如何做的呢?
首先,Rails的Controllers对应Django里的Views,Rails的Views对应Django的Templates,这里开始转换术语。Rails的Controller的Function的名称,将直接决定了Template名字。比如我关于Post的Controller有一个名为「index」的function,那么很自然的,对应的View即是:app/views/posts/index.html.erb,不需要我指定目录、文件名。与此同时,route方面当然也不需要我动手去写,因为Rails约定了这种情况下,直接访问「/posts/」,即会去调用index这个Controller。
相应的,涉及到Detail时,Rails约定了访问/posts/id时,将去调用show这个function去render show.html.erb这个template。你不用再做一些诸如像Django一样写了个View以后还需要告诉它去Render哪个Template,Rails约定相同名称的M、V和C之间相互进行调用。当然,如果你需要Post的Controller去render Comment的View,这也是非常容易可以做到的。
再举一例:
假设有一个Post的Model,有id、title、author等属性,那么在使用这个model进行查询时,Rails除了标准的「Post.find」这个方法外,还自动扩展了「Post.find_by_id」,「Post.find_by_title」,「Post.find_by_author」等方法。虽然即使不扩展这些方法,用传入参数的方式也麻烦不到哪里去,但是我相信,这种无处不在约定,使得Rails项目在不断成长的过程中,你将享受到越来越多的便利——再也不会为会取名和为不同风格开发成员之间的协调而头疼,只要大家都遵守Rails最基本的约定,那么团队成员之间的协调就不会有太大的问题。
除以上两个简单的例子之外,Rails的约定几乎无处不在:unit test,database migration,assets management…几乎覆盖整个Web开发过程中的所有事项,Rails都有对应的先进的解决方案及约定。
记得我刚刚用「rails new imtx」创建我第一个Rails项目时,我就被它的输出给震惊了——因为我看到了看到了:「.gitignore」和「.gitkeep」。天那!Rails甚至约定了你要用Git这个先进的源代码管理工具,你都不需要为选择源码管理工具而头疼了,直接用Git吧!
此外,从内置CoffeeScript、SCSS等技术也可以看出,Rails为了让Web开发轻松且容易,是做了很多个非常酷的约定!
以上只是我接触了Rails不久之后才引发的一些感触,我已经渐渐喜欢上的Rails,希望在接下去的深入当中,我会更加喜欢它。
截图为我在Ubuntu 12.04下开发IMTX On Rails,根据我的体验,Ubuntu是最为触手可得的开发Rails的最佳平台
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。