【发布时间】:2015-06-02 22:12:18
【问题描述】:
假设我们有以下类:Bakery、Equipment 和 Batch。 Bakery 由Equipment 组成,如下所示:
class Bakery
attr_accessor :equipment
end
Equipment 看起来像这样:
class Equipment
attr_accessor :name, :quantity
end
因此,要表示一家有两个烤箱的面包店,我们可以这样做:
ovens = Equipment.new
ovens.quantity = 2
bakery = Bakery.new
bakery.equipment = [ovens]
现在Batch 类代表一批烘焙食品。它本身由一个Formula 和几个Step 对象组成。 Formula 类包含步骤顺序和时间信息,以便Batch 知道何时需要使用某些设备。 (为简洁起见,我省略了Formula 和Batch 代码。完整代码可用here 和here。)
我的问题是如何使用 OOD 将某些设备(例如 1 个烤箱)的所有权从 bakery 临时转移到 batch。 bakery 拥有一个代表两个烤箱的 Equipment 实例。其中一个烤箱将暂时被batch 进程占用。我是否应该创建Equipment 的新实例并将其传递给batch,同时减少ovens 的quantity?还是我不应该为quantity 属性而烦恼,而只需为面包店的每个烤箱创建一个Equipment 实例?在这种情况下,我可以简单地将最后一个烤箱从bakery.equipment 数组中弹出,然后将其推到batch.equipment 上,直到batch 完成。一项业务逻辑要求是能够查询bakery.equipment 的未来可用性。因此,当前状态(即有多少烤箱被占用)和未来状态(即晚上 9:00 将占用多少烤箱)之间需要有所区别。
【问题讨论】:
标签: ruby oop design-patterns object-oriented-analysis