Ruby 板


LINE

出自我的 Blog http://lightyror.blogspot.com/2006/10/dry-or-not-dry.html DRY 也就是 Don't Repeat Yourself 的简称,Ruby on Rails 导入许多机制只是为了更好 DRY your code ,使用 DRY 可以有效减少需要维护的 Code。 不过也发生一些小问题,有些时候,到底要不要 DRY ? 像是 Partial Template 这个机制,本来也是为了 DRY 而产生的。可是遇到一个情况 当许多 template 都会呼叫到同一个 partial 但是每个 template 呼叫的 partial 都希望有微小的改变 像是 A template 是外面的人看到的页面,他呼叫partial X ,你不希望 partial X出现管理的 link ,让外人可以进入管理的页面。但是B template 是已经经过认证的 User,他也呼叫 partial X,但是他却希望partial X出现管理的 link 。 难道你要为了新增一个 link ,另外写一个页面? 这样就不够 DRY 了,所以我们其实可以在 Partail X 这样搞 if params[:controller] == 'A_controller' and params[:action] == 'B_action' show_link end 其实parmas 变数里面有 controller 跟 action 变数,可以记载这个 template 现在正在那边。一般来说没有用到的必要,因为 controller 跟 view 的对应是 1:1 的关系。只不过,我们用到 partial template 时,如果遇到刚刚的情况,可以使用这两个变数来探知现在这个 partial 被那个 controller 跟 action 所呼叫,并且做出不同反应。 听起来很棒,其实是另外一个问题的开始。Ruby on Rails 之所以 Controller 跟 Action 会预设 1:1 对应其实也让 coder 清楚程式架构的因素在。如果你 过量 使用上述的方式,会让你的 view code 出现 if params[:controller] == 'A_controller' and params[:action] == 'B_action' show_link elsif params[:controller] == 'C_controller' and params[:action] == 'D_action' show_link2 elsif params[:controller] == 'E_controller' and params[:action] == 'F_action' show_link3 elsif params[:controller] == 'G_controller' and params[:action] == 'H_action' show_link4 elsif params[:controller] == 'I_controller' and params[:action] == 'J_action' show_link5 elsif params[:controller] == 'K_controller' and params[:action] == 'L_action' show_link6 elsif params[:controller] == 'M_controller' and params[:action] == 'N_action' show_link7 end 这样的code 太可怕了。 回到 Ruby on Rails 的根本,这一切的一切都是为了加快开发速度而设计的。 为什麽要使用 DRY ?因为要减少 Code 量,Code 量少就会减少 Code 的维护成本。减少 Code 维护成本才能增加开发速度。但是虽然我们使用 DRY 原则减少了程式的 code 量,但是却增加了阅读的难度。这有意义吗?并且 view 层本来就不能安插太多程式,这会造成架构上的混乱。因为上述的情况并不会有效的减少 Code 维护成本,某种程度还会增高维护成本,所以为了大原则 加快开发速度 ,我们必须给予重写。 但是话说回来 if params[:controller] == 'A_controller' and params[:action] == 'B_action' show_link end 这段对我来说并不会下降可读性,却又拥有 DRY 的优点,对我来说这是会加快开发速度的,所以我允许我自己这样写。一般来说,partial 出现 if 二选一,或是三选一我是允许的,四选一的话,重构吧。 凡事过与不及都不好,要怎麽取得平衡才是大学问呀。 -- lighty RoR 是一个介绍 lighttpd , SQLite , Ruby and Rails 的 Blog http://lightyror.blogspot.com/ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.102.201 ※ 编辑: giive 来自: 61.230.102.201 (10/17 08:43) ※ 编辑: giive 来自: 61.230.102.201 (10/17 08:43)
1F:推 PttHuge:请问partial是ruby还是CS的术语吗? 10/17 09:48
2F:推 giive:Rails 的 render :partial 10/17 11:57







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP