4

我有line_itemswithunit_pricequantity属性(除其他外)。

在 Ruby on Rails 中对此进行建模的最佳方法是什么?

现在,我的LineItem模型中的很多函数都遵循这种模式:

def total_price
  unit_price * quantity
end

这行得通,但我想知道:这种方法有用吗?或者当一百万用户同时使用它时,它会让我的应用程序崩溃吗?

另一种方法是将 存储total_price为数据库字段,每次保存后都会使用以下内容进行更新:after_save :update_total。不过,我不是冗余数据库列的忠实粉丝。我想将它们保持在最低限度。

这样做的专业方法是什么?

4

1 回答 1

6

这是计算值与存储的一般问题。我不确定所有情况都有一个单一的答案,但这里有一些需要考虑的因素:

  • 计算成本高吗?如果是的话,最好保存
  • 像 unit_price 这样的变量是否在变化?如果是,最好计算,因为如果你存储,当 unit_price 变化时你必须重新计算所有的 total_price
  • 你会查询计算值吗?如果是,最好存储和使用数据库功能(例如,如果您想要总价大于 500 的所有产品)。
  • 请注意,在这种(简单)情况下,可以要求数据库也进行计算(WHERE UNIT_PRICE * QUANTITY > 500),但某种计算可能无法或不方便用 SQL 表示。

对于所有“性能”方面,唯一正确的答案是:测量。你不能事先说出来。这意味着最初,选择最简单的方法(我会计算),配置文件,然后看看是否有理由切换。Rails 和 Ruby 充满了分析工具(您可以从 Rails性能测试开始)。

于 2013-02-21T15:44:02.720 回答