是时间关系不好的设计吗?
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
就像您在需要当前站点时所做的那样。
所以目前我有以下 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
就像您在需要当前站点时所做的那样。