瞎扯淡 Rails has Two Default Stacks

hooopo for Shopper+ · 2013年08月14日 · 最后由 kgtong 回复于 2014年02月13日 · 6652 次阅读
本帖已被管理员设置为精华贴

Omakase Stack

  • ERB for view templates
  • MySQL for databases
  • MiniTest for testing
  • Fat Models, Skinny Controllers

Prime stack

  • Haml for view templates
  • PostgreSQL for databases
  • Rspec/Cucumber for testing
  • Skinny models, controllers, and a service layer

名字的重要性

上面两种叫法来自 steveklabnik 的博文:Rails has Two Default Stacks 。 对两种 stack 的优劣争论没性趣,但我很欣赏这样的命名。假设你是做 Rails 培训的,客户问你培训哪些课程,回答Omakase Stack多么高端大气上档次呀...

因为我对《写给大家看的设计书》里开篇提到的约书亚树的故事印象深刻。 作者通过约书亚树的故事说明“一旦能够说出什么东西的名字,就会很容易注意到它。你就会掌握它,拥有它,使它在你的控制中。”

一点私货

最后说一句,Padrino do it right.

附约书亚树的故事

很多年前的一个圣诞节,我收到一份圣诞礼物,是一本关于如何认识各种树的书。那时我住在父母的家里,所有礼物都打开后,我决定出去走走,认一认邻居家的树。出去之前我读了书的一部分。其中提到的第一种树是约书亚树,只需要两个线索就能认出它。由于约书亚树相当怪异,所以看到书中它的照片时,我对自己说:"哦,北加利福尼亚绝对没有这种树。这种树太怪异了。如果我见过,肯定应该有印象,可我以前从来没有见过。"

约书亚树

之后我拿着这本书走出去。我的父母住在一个小巷子里,这里共有 6 家住户。其中 4 家的前院里都赫然立着约书亚树。我住在那里已经有 13 年了,而我此前从来没有注意过约书亚树。我在这个街区转了转,发现似乎每一家布置新居时苗圃里都有约书亚树卖,至少 80% 的住家前院都种有约书亚树。而我在此之前居然从来没有注意过!在我知道了这种树之后,我是说在我能够说出它的名字后,它就无处不在了。这正是我要说的:一旦能够说出什么东西的名字,就会很容易注意到它。你就会掌握它,拥有它,使它在你的控制中。

主厨推荐 vs 私房菜单;消费者自选,教父干的好!

Rails 模块化做得好,想换什么就换什么。

我在这个街区转了转,发现似乎每一家布置新居时苗圃里都有约书亚树卖,至少80% 的住家前院都种有约书亚树。
I took a walk around the block, and there must have been a sale at the nursery when everyone was landscaping their new homes —at least 80 percent of the homes had Joshua trees in the front yards. 

貌似没翻对嘛... 我还是慢慢爬鸡爪文算了

类似于:每次开始关注某种车的时候 就会发现路上突然多了好多这个车

#4 楼 @Levan 是啊,我经常有这样的体会..

处于中间

Padrino 不是比 Django 还挫么

#10 楼 @hooopo

Padrino 竟然有 admin 啊,太挫了,就和 Django 一样挫。(Padrino 自己承认的 akin to Django)

Padrino 竟然用正则表达式来 url routing,太挫了,就和 Django 一样挫。

Padrino 要 mount 啊,太挫了,就和 Django 一样挫。

Padrino 同一个 app 竟然不能 mount 两次啊,太挫了,比 Django 还挫

比如有个 blog app 你能 mount 两次么 (两次分别用各自的数据库表)

PHP 是最 CoC/MVC 的语言,Omakase 总是最正确的框架

#11 楼 @bhuztez

Padrino 竟然用正则表达式来 url routing,太挫了,就和 Django 一样挫。

Sinatra 2.0 和 Padrino 将使用的新路由:https://github.com/rkh/mustermann

#13 楼 @hooopo 太挫了,就和 werkzeug.routing 一样挫啊

比如有个 blog app 你能 mount 两次么 (两次分别用各自的数据库表)

目前还没有这种变态需求,不过这个很难实现么

#15 楼 @hooopo 那就请你来简单实现一下

#16 楼 @bhuztez 等我干完活儿的..

#12 楼 @bhuztez 怎么可能

PHP 是最 CoC/MVC 的语言

#18 楼 @camel

专注于把所有逻辑都写模板里二十年,这还不够 CoC 啊

PHP 的 MVC 可比 Omakase 早了好多年啊 M <- SQL V <- PHP C <- Apache rewriting

20 楼 已删除

@huacnlee 现在的喜欢图标变得好艳呀,乍看上去像一排红唇,个人还是喜欢传统一点的灰白配 现在正常了

22 楼 已删除

我想起我在 oschina.net 提交过这篇文章的翻译 http://www.oschina.net/translate/rails-has-two-default-stacks

#2 楼 @Rei 尽量做到一行禁用模块,这个设计很开放

#11 楼 @bhuztez mount 两次完全是用 rewrite 就能搞定的事情...

#25 楼 @luikore 你后面用的是同一个数据库表吧

#27 楼 @bhuztez class 是无状态的,想切换就按照 url 设一下 table name 或者换到别的 connection 啊,另外如果相应的 preference 很多,继承一下 controller 就好了,为什么非要用 mount 做... 再说在 controller 做 model 的事情不就是搞 php 了吗?

#28 楼 @luikore 不只是设一下 url 这么简单,还要把 table 建起来啊

比如这样

mount blog as blog1
mount blog as blog2

route /blog1 to blog1
route /blog2 to blog2

#29 楼 @bhuztez 这样? https://github.com/sshingler/resque-web/blob/master/examples/config.ru#L18-L20

run Rack::URLMap.new \
  "/"       => Demo::App.new,
  "/resque" => Resque::Server.new,
  "/resque2" => Resque::Server.new

#30 楼 @hooopo 对啊,后面用不同的 table 就行啊

#23 楼 @wppurking 从这篇翻译看,刚开始叫37signals Stack,由于DHH 不同意这种叫法,改成了Omakase Stack

#29 楼 @bhuztez 就是改下 url 这么简单。再加个 filter 根据 url 切换 db connection 就可以了...

#33 楼 @luikore 那数据库表怎么建立出来?切换 connection 就用了两个不同的数据库了?要求用同一套帐号。

#34 楼 @bhuztez 如果数据库是 mongodb 或者 orm 是 datamapper, 那是访问什么就有什么

在 padrino / rails 里建表和 router 一毛线关系都没有。你是在说怎么把橘子弄成苹果味么...

#35 楼 @luikore 现在讨论的是 mountable,既然 url routing 那里都 mount 了,凭啥数据库里的 table 不能 mount

#36 楼 @bhuztez 你可以切换连接/表啊,但建表是 db migration 的事,和 mount 有什么关系...

还有就是 MVC 里 C 不是和 model 一一对应的,orm 里 model 也不是和 table 一一对应的,要把一个表挂到一个 url 上不如直接用数据库自带的 rest api 好了

#37 楼 @luikore mount 能不能用字面意啊,不要用 url routing 的语义啊

喜欢后者

Haml -> Slim

一旦能够说出什么东西的名字,就会很容易注意到它。你就会掌握它,拥有它,使它在你的控制中 padrino

and a service layer -- 具体指的是什么呢..?

43 楼 已删除
需要 登录 后方可回复, 如果你还没有账号请 注册新账号