在我之前的学习项目中,我总是使用单个控制器,但现在我想知道这是否是好的做法,甚至总是可能的。
在所有 RESTful Rails 教程中,控制器都有一个show
, an edit
and an index
看法。如果授权用户登录,则edit
视图变得可用并且index
视图显示其他数据操作控件,例如删除按钮或指向edit
view.
现在我有一个 Rails 应用程序,它完全属于这种模式,但是index
视图不可重复使用:
- 普通用户会看到一个华丽的索引页面,其中包含大量图片、复杂的布局、不需要 JavaScript,...
- 管理员用户索引具有完全不同的简约设计、jQuery 表和大量附加数据,...
现在我不知道如何处理这个案子。我可以想到以下几点:
- 单个控制器,单个视图:使用一个控制器将视图分为两个大块/部分
if
陈述。
- 单控制器,两个视图:
index
and index_admin
.
- 两个不同的控制器:
BookController
and BookAdminController
这些解决方案似乎都不完美,但目前我倾向于使用第三个选项。
执行此操作的首选方法是什么?
几乎每次接到新项目时我都会问自己这个问题。我通常选择以下两种解决方案之一:
1).单控制器,单视图
我现在几乎从不选择这个解决方案,除非项目非常简单,并且只有一两种类型的用户。如果您有多种用户类型,最好使用解决方案#2。尽管此解决方案可能很有吸引力,因为您认为通过编写更少的代码可以节省一些时间,但最终,您的控制器和视图将变得更加复杂。更不用说您必须考虑的所有边缘情况了。这通常意味着错误。
我的公司曾经要拯救一个失败的项目,它有3种用户类型。 (管理员、业务和会员)。他们使用了解决方案#1。代码状况很糟糕(这就是我们被要求拯救这个项目的原因)我们开玩笑地说这不是 MVC,而是 MMM。 (模型-模型-模型)这是因为业务逻辑没有正确提取并放入模型中,而是散布在控制器和视图中。
2)。多个控制器,多个视图
这些天我越来越多地使用这个解决方案。我通常用用户类型命名控制器。例如:
在“应用程序/控制器”中
class BookController < ApplicationController
end
并在“应用程序/控制器/管理”中
class Admin::BookController < Admin::BaseController
end
我填写BookController时只需要考虑普通用户,填写时只需要考虑admin用户Admin::BookController
我不确定是否有更好的方法,但这是我从迄今为止所做的十几个项目中学到的......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)