是时间关系不好的设计吗?

Is it a temporal relationship bad design?

所以目前我有以下 mongoid 模型。

class Delivery
  include Mongoid::Document
  include Mongoid::Timestamps

  field :address, type: String

  has_many :stops
  belongs_to :current_stop, class_name: 'Stop'

  def next
    current_stop = stops.where(completed: false).first
    save
  end
end

class Stop
  include Mongoid::Document
  include Mongoid::Timestamps

  field :address, type: String
  field :completed, type: Boolean, default: false

  belongs_to :delivery, inverse_of: :stops
end

一般的想法是交付有多个站点,其中 driver 需要交付包裹,在 Deliver 模型中,我跟踪正在完成的当前站点。我在交付模型中使用了 belongs_to 而不是 has_one,因为我想使用使用 has_one 时未生成的生成访问器 current_stop_id。另一方面,我决定不在 Stop 模型中使用 has_one,因为我不打算使用它,而且当 Stop 完成时它有两个关系指向同一个 Delivery 记录,这可能会令人困惑。

我的问题是,您是否认为拥有这种 current_stop 时间关系是糟糕的设计,因为它会不断变化,并且在所有停靠点结束时都将变为零?如果是这样,考虑到跟踪正在完成的当前停止很重要,您将如何处理这种情况。

取决于当前止损的使用方式,但是您的代码已经定义了当前止损:

current_stop = stops.where(completed: false).first

current_stop 方法是获取此信息的另一种方法。如果 current_stop 由多个线程更新,这两种方法会使数据不同步。

我会说,直到您确实需要当前站点的缓存,查询 stops 就像您在需要当前站点时所做的那样。