(MVC) Логика, охватывающая несколько моделей - PullRequest
1 голос
/ 25 февраля 2011

Моя настройка: Rails 2.3.10, Ruby 1.8.7

Я хотел бы получить отзыв о том, где лучше всего разместить логический код, и REST API, который касается нескольких моделей в одной транзакции. Например, пользователю нужно купить продукт, это будет включать

  1. Проверяет, достаточно ли у него денег (модель пользователя)
  2. Проверьте, доступен ли продукт (модель продукта)
  3. Рассчитать стоимость доставки (почтовый индекс, модели продуктов)
  4. Вычесть деньги
  5. Обновить счетчик доступности продукта
  6. ...

Вы поняли основную идею. Допустим, мне нужно предоставить REST API для покупки, в какой контроллер он должен войти? И куда должна идти логика? Должно ли это быть в модели, связанной с контроллером? Цените любые идеи.

1 Ответ

3 голосов
/ 25 февраля 2011

Я не знаю, что такое соглашение (если оно есть), но я склонен выполнять свои многомодельные транзакции в формате "существительное-глагол".Например, если бы User хотел купить Product, я бы сделал:

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

Контроллер работает аналогично, хотя я обычно думаю об этом пассивным голосом (например, «какой глагол *»)1008 * делается для что существительное ", а не" что существительное делает то, что глагол ". Например, если был куплен Product, это может быть от POST до /products/1/purchase, сследующий код контроллера:

class ProductsController < ApplicationController
  include SessionsHelper

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

Используя эти «условные обозначения», я легко могу найти логику в своем приложении, думая о том, какой глагол делается для какого существительного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...