使用 Ruby 的面向对象设计,如何显示所有权的转移?
Using Object Oriented Design with Ruby, how to show transfer of ownership?
假设我们有以下 classes: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
class 代表一批烘焙食品。它本身由一个 Formula
和几个 Step
对象组成。 Formula
class 包含步骤顺序和时间信息,以便 Batch
知道何时需要使用某些设备。 (为简洁起见,我省略了 Formula
和 Batch
代码。完整代码可用 here and here。)
我的问题是如何使用 OOD 将某些设备(比如 1 个烤箱)的所有权从 bakery
临时转移到 batch
。 bakery
持有代表两个烤箱的 Equipment
实例。其中一个烤箱将暂时被 batch
进程占用。我是否应该创建一个新的 Equipment
实例并将其传递给 batch
,同时递减 ovens
的 quantity
?还是我不应该理会 quantity
属性而只是为面包店的每个烤箱创建一个 Equipment
实例?在那种情况下,我可以简单地从 bakery.equipment
数组中弹出最后一个烤箱并将其推到 batch.equipment
上,直到 batch
完成。一项业务逻辑要求是能够查询 bakery.equipment
的未来可用性。因此需要区分当前状态(即有多少烤箱被占用)和未来状态(即有多少烤箱将在 9:00 下午被占用)。
我认为您对数据建模不正确。你的Bakery
不仅有装备,还有available equipment
和occupied equipment
。而Batch
没有任何东西,它要求Bakery暂时将一些设备标记为已占用。
它可以根据您的 memory/performance/code 简单性要求进行不同的建模。
一个例子(我想这不是 performance/memory 明智的,但是说明性的)是让 Bakery
在列表中存储可用的设备,然后将 Bakery
传递给一个新的 Batch
将一些插槽(或增加某些项目的使用计数器)标记为忙碌的实例。
在Batch
根据其Formula
将Bakery
中的所有设备标记为忙碌后,即可对面包店进行分析。
嗯,这只是一个整体的例子,并不是很详细。但是,我不知道您要解决的确切问题 ;)
假设我们有以下 classes: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
class 代表一批烘焙食品。它本身由一个 Formula
和几个 Step
对象组成。 Formula
class 包含步骤顺序和时间信息,以便 Batch
知道何时需要使用某些设备。 (为简洁起见,我省略了 Formula
和 Batch
代码。完整代码可用 here and here。)
我的问题是如何使用 OOD 将某些设备(比如 1 个烤箱)的所有权从 bakery
临时转移到 batch
。 bakery
持有代表两个烤箱的 Equipment
实例。其中一个烤箱将暂时被 batch
进程占用。我是否应该创建一个新的 Equipment
实例并将其传递给 batch
,同时递减 ovens
的 quantity
?还是我不应该理会 quantity
属性而只是为面包店的每个烤箱创建一个 Equipment
实例?在那种情况下,我可以简单地从 bakery.equipment
数组中弹出最后一个烤箱并将其推到 batch.equipment
上,直到 batch
完成。一项业务逻辑要求是能够查询 bakery.equipment
的未来可用性。因此需要区分当前状态(即有多少烤箱被占用)和未来状态(即有多少烤箱将在 9:00 下午被占用)。
我认为您对数据建模不正确。你的Bakery
不仅有装备,还有available equipment
和occupied equipment
。而Batch
没有任何东西,它要求Bakery暂时将一些设备标记为已占用。
它可以根据您的 memory/performance/code 简单性要求进行不同的建模。
一个例子(我想这不是 performance/memory 明智的,但是说明性的)是让 Bakery
在列表中存储可用的设备,然后将 Bakery
传递给一个新的 Batch
将一些插槽(或增加某些项目的使用计数器)标记为忙碌的实例。
在Batch
根据其Formula
将Bakery
中的所有设备标记为忙碌后,即可对面包店进行分析。
嗯,这只是一个整体的例子,并不是很详细。但是,我不知道您要解决的确切问题 ;)