Oop OOD:订单。填充(仓库)-或-仓库。填充(订单)

Oop OOD:订单。填充(仓库)-或-仓库。填充(订单),oop,Oop,哪种形式是正确的OO设计? “品味问题”是平庸者的简单出路。 这方面有什么好的读物吗? 我想要一个决定性的证明 编辑:我知道哪个答案是正确的(眨眼!)。我真正想看到的是任何支持前一种形式的论点(order.fill(warehouse)没有确凿的证据,在某种程度上,这是一个品味问题。OO不是科学,而是艺术。它还取决于领域、整体软件结构等,因此您的小示例不能外推到任何OO问题 然而,以下是我根据您的信息得出的结论: 仓库储存物品。他们不执行命令。命令要求东西。他们不知道这些东西来自哪个仓库。因此,

哪种形式是正确的OO设计?
“品味问题”是平庸者的简单出路。
这方面有什么好的读物吗?
我想要一个决定性的证明


编辑:我知道哪个答案是正确的(眨眼!)。我真正想看到的是任何支持前一种形式的论点(
order.fill(warehouse)

没有确凿的证据,在某种程度上,这是一个品味问题。OO不是科学,而是艺术。它还取决于领域、整体软件结构等,因此您的小示例不能外推到任何OO问题

然而,以下是我根据您的信息得出的结论:

仓库储存物品。他们不执行命令。命令要求东西。他们不知道这些东西来自哪个仓库。因此,两者之间的任何一个方向的依赖都是不正确的

在现实世界和软件中,某种东西将成为两者之间的调解人@themel在对你的问题的评论中也指出了同样的问题,不过我更喜欢一些不太像编程模式的东西。也许是这样的:

ShippingPlan plan = shippingPlanner.fill(order).from(warehouses).ship();

然而,这是一个品味的问题:-)

最简单的形式是仓库是一个库存储存场所。
但将仓库视为由存储空间、个人、装运码头等组成的设施也是正确的。如果您假设仓库的视图,则可以说仓库(作为设施)可以负责填写订单,或以扩展形式:

仓库设施能够根据给定的规格(订单)组装货物

以上是一个理由(如果不是证据):
仓库。填写(订单)表单。请注意,此表单实质上等同于SingleShot和themel的建议。诀窍是整合shippingPlanner(订单履行机构)和仓库(库存存储空间)。简单地说,在我的示例中,仓库是由一个
订单履行机构
和一个
库存存储空间
组成的,在SingleShot中,这两个部分分别显示。这意味着,如果此类合并不可接受(或变得不可接受)(例如,由于零件的复杂性),则仓库可以分解为这两个子组件

我想不出将
fill
操作分配给
order
对象的理由

喂?仓库是的,请把这张订单填好。谢谢我能理解


嘿,命令!仓库在那边。做你自己的事,让自己充实起来对我来说毫无意义。

abstractOrderExecutionFactory.fill(订单、仓库)如何?请参阅我的答案,了解为什么您的建议是有效的,但不是必需的。我理解DI在有保证的情况下是一种改进。在这种情况下,问题不是如何改进它,而是如何选择其中一个。实际上,我想知道是否有一个领域,
order.fill(warehouse)
是更好的选择。