与单独的 class 具有关联关系的复合 class
A composite class with an associative relationship to a separate class
使用模块和 classes,定义这种 class 关系的最佳方式是什么?
一种商品有零个或多个价格系列'(聚合),价格系列对象是通过选择Excel文件对象的一部分来创建的。
(excel 文件对象是已转换为 json 类结构的 excel 工作簿)
我认为 Excel 文件 class 应该是一个单独的 class class...然后我可以实例化一个商品(例如 gold = Commodity.new("gold")
).我可以实例化一个 Excel 文件(例如 yahoo_prices = ExcelFile.new(xlsx_file_name)
)。
但现在我想使用 Commodity 命名空间之外的 ExcelFile 对象实例化一个 PriceSeries 对象(在商品对象内)。
我该怎么做?我应该这样做吗?我在正确的轨道上吗?
我认为应该是这样的:
class ExcelFile
end
class Commodity
class PriceSeries
end
end
此 "program" 将成为更大程序中的一个功能。将所有这些 class 放在一个模块中,然后最终将其混合到 "main" class 中是个好主意吗?
你走在正确的轨道上。但是,您的图表显示的是聚合而不是内部 class,正如您的代码所具有的那样。所以他们彼此不太一致。我认为你应该按照你的图表更改你的代码:
class ExcelFile
end
class Commodity
PriceSeries[] myPriceSeriesArray
end
class PriceSeries
end
当然,不仅如此:您必须有一种方法来创建 PriceSeries 实例并将它们分配给 myPriceSeriesArray 数组等。但这是基本的想法。
现在,关于您的图表有几点:
*
是 0..*
的缩写。由于您至少需要一个 PriceSeries 和一个 ExcelFile,因此您需要将它们更改为 1..*
。 (这假设您可以拥有任意数量的其中之一,只要您至少拥有一个即可。)
- 我建议您将
<<file>>
原型放在您的 ExcelFile class.
- 考虑将 Commodity 和 PriceSeries 之间的关联作为组合而不是聚合(黑色菱形而不是白色菱形)。这意味着您的 PriceSeries class 的生命周期与 Commodity class 的生命周期相关联。它看起来不像 PriceSeries 实例具有任何独立于商品的逻辑标识,因此当您处理商品对象时,我认为您也会处理 PriceSeries 对象。如果您决定这样做,您的代码应该在 Commodity 的构造函数中实例化必要的 PriceSeries 对象,并将它们分配给 myPriceSeriesArray 属性。
使用模块和 classes,定义这种 class 关系的最佳方式是什么?
一种商品有零个或多个价格系列'(聚合),价格系列对象是通过选择Excel文件对象的一部分来创建的。
(excel 文件对象是已转换为 json 类结构的 excel 工作簿)
我认为 Excel 文件 class 应该是一个单独的 class class...然后我可以实例化一个商品(例如 gold = Commodity.new("gold")
).我可以实例化一个 Excel 文件(例如 yahoo_prices = ExcelFile.new(xlsx_file_name)
)。
但现在我想使用 Commodity 命名空间之外的 ExcelFile 对象实例化一个 PriceSeries 对象(在商品对象内)。
我该怎么做?我应该这样做吗?我在正确的轨道上吗?
我认为应该是这样的:
class ExcelFile
end
class Commodity
class PriceSeries
end
end
此 "program" 将成为更大程序中的一个功能。将所有这些 class 放在一个模块中,然后最终将其混合到 "main" class 中是个好主意吗?
你走在正确的轨道上。但是,您的图表显示的是聚合而不是内部 class,正如您的代码所具有的那样。所以他们彼此不太一致。我认为你应该按照你的图表更改你的代码:
class ExcelFile
end
class Commodity
PriceSeries[] myPriceSeriesArray
end
class PriceSeries
end
当然,不仅如此:您必须有一种方法来创建 PriceSeries 实例并将它们分配给 myPriceSeriesArray 数组等。但这是基本的想法。
现在,关于您的图表有几点:
*
是0..*
的缩写。由于您至少需要一个 PriceSeries 和一个 ExcelFile,因此您需要将它们更改为1..*
。 (这假设您可以拥有任意数量的其中之一,只要您至少拥有一个即可。)- 我建议您将
<<file>>
原型放在您的 ExcelFile class. - 考虑将 Commodity 和 PriceSeries 之间的关联作为组合而不是聚合(黑色菱形而不是白色菱形)。这意味着您的 PriceSeries class 的生命周期与 Commodity class 的生命周期相关联。它看起来不像 PriceSeries 实例具有任何独立于商品的逻辑标识,因此当您处理商品对象时,我认为您也会处理 PriceSeries 对象。如果您决定这样做,您的代码应该在 Commodity 的构造函数中实例化必要的 PriceSeries 对象,并将它们分配给 myPriceSeriesArray 属性。