(MVC)跨越多个模型的逻辑

时间:2011-02-25 05:22:13

标签: ruby-on-rails model-view-controller

我的设置:Rails 2.3.10,Ruby 1.8.7

我希望得到一些反馈,说明在单个事务中触及多个模型的逻辑代码和REST API的最佳位置。例如,用户需要购买产品,它将涉及

  1. 检查他是否有足够的钱(用户型号)
  2. 检查产品是否可用(产品型号)
  3. 计算运费(邮政编码,产品型号)
  4. 减钱
  5. 更新产品可用性计数
  6. ...
  7. 你得到了一般的想法。假设我需要提供一个购买REST API,它应该进入哪个控制器?实际逻辑应该去哪里?它应该在与控制器相关的模型中吗?欣赏任何见解。

1 个答案:

答案 0 :(得分:3)

我不知道约定是什么(如果有的话),但我倾向于以“名词 - 动词”格式进行多模型交易。例如,如果User想要购买Product,我会这样做:

class User < ActiveRecord::Base
  ...
  def purchase(product)
    product.logic
    self.step_3_profit
    etc
  end
end

控制器工作方式类似,虽然我通常用被动语态来思考它(例如,“动词正在做什么什么名词”,而不是“什么名词做什么动词”。例如,如果正在购买Product,则可能是POST/products/1/purchase,并带有以下控制器代码:

class ProductsController < ApplicationController
  include SessionsHelper

  def purchase
    current_user.purchase Product.find(params[:id])
    do_view_stuff
  end
end

使用这些“惯例”,我可以通过思考动词是用哪个名词来轻松找到我的应用程序中的逻辑。