在 Rails 编程中,感觉很难把握 DRY 原则的度。
比如说有一个流程,建立 product 模型。 编程 MVC 将所有的功能都做好了。 routes.rb 如下:
match '/products/:id/hide' => 'products#hide', :as => :hide_product
match '/products/:id/release' => 'products#release', :as => :release_product
match '/products/offlines' => 'products#offline', :as => :product_offline
resources :products do
collection do
post 'sort'
end
end
end
现在要加一个独立后台,运行rails generate controller Cpanel::Products
.
至此,在 routes.rb 里除了原本的resources :products
外又多出了:
namespace :cpanel do
resources :products
end
到这一步得去编辑 namespace,将算定义的 hide,release,offlines,sort 之类的方法重写一次。
同时,views 里相应地也建立了 cpanel/products, controllers 里相应建立了 cpanel/products_controller.rb 文件。
于是又得将已经写好的 view 与 controller 重写一次。
当然,可以直接render :file => 'products/show'
,render :file => 'products/index'
,但是,很明显,如果 render 'products/form'的话在后台里编辑后会直接跳转到前端 show 页面。
这样的话,routes,views,controllers 里多出了许多只有细微差别的代码。虽然只要 copy 一下,但是感觉上却非常糟糕,很明显是违背 DRY 原则的。
在这种情况下,有什么好的解决方案?copy 不累人,只是这样整出的代码自己都觉得无法原谅。