【发布时间】:2010-03-31 03:46:13
【问题描述】:
我知道以前已经回答过类似的问题 - 例如:
- 逻辑应该去哪里
- 在哪里执行某些任务等。
但我有一个更具体的问题 - 我应该在多大程度上遵循这个公理:让你的控制器保持苗条,让你的模型变胖!
这是一个例子:
例如,假设我有多个验证数据来源。一个很好的例子是 VIN 号码 - 我可以根据制造商数据源、DMV 的数据源以及我的本地数据库来验证它——看看我有什么记录在案。 所以我有一个模型叫做 Vin 和 vins_controller。在模型内部,我有 5 种方法:
- check_against_local_db
- check_against_dmv
- check_against_car_maker_1
- check_against_car_maker_2 等
在与 REST 保持一致的控制器中,实际显示 - 我有一个简单的 case 语句,它查看 params[:source],并基于指定的源 - 将调用特定的检查方法。
现在问题来了: 我应该保留控制在控制器中调用哪个数据源的逻辑,还是应该将其移动到模型中,然后在控制器中执行 check_vin(source, vin) 之类的操作?
我应该让我的控制器厌食吗?
编辑
我正在将此转换为来自@jay-godse 的官方答案(谢谢 - 当时这是一个很好的答案)。 自 2010 年以来,情况发生了很大变化,这个问题仍然得到了一些看法——所以希望这会给一些人指明正确的方向,并帮助他们正确地组织代码。
Trailblazer gem 很好地解决了问题中提出的问题。
【问题讨论】:
标签: ruby-on-rails ruby model controller