我有一个Order对象来代表预期订单/收据。这是一个实体。它有一个身份。
我有一个Writer对象来读取Order对象的属性并很好地显示它。
为客户的账单明细的所有部分提供个人吸气器是一件苦差事。
所以,我想让Writer对象从Order对象中获取Client的Billing Details Value Object。 (我猜客户的账单明细值对象被称为'依赖' - 如果我错了,请纠正我)
现在,如果我这样做,我希望这种依赖关系“知道”原始持久数据是否会发生变化
即。如果countryId从'214'变为'35'
因此,依赖性可以返回新的countryAsPrettyString'Mexico',而不是“厄瓜多尔”的旧值。
所以我想我会在订单对象中有一个工厂方法,并且可以将订单对象注入客户的账单明细值对象的构造函数中,因此账单明细对象总是从订单的原始持久数据属性中获取它的属性。
您对此行动计划的反应如何:
A:Blimey显然这是实现它的唯一方法
或
B:我的天哪!在几个月的时间内留出一些时间来解决一些严重的问题 - 你会产生一些纠结 - 我觉得你。
或 C:[其他]
我问cos这对我来说似乎是一种双向联想。
订单 帐单明细对象
和
结算明细对象 订单
我已经读过双向关联是不好的OOP练习。
答案 0 :(得分:0)
答案 1 :(得分:0)
所有这一切都是因为“为客户的账单明细的所有部分提供个人吸气器是一件苦差事。”。
我不知道你的类是如何实现的,但是可以使用PHP的__call来自动构建这些getter吗?
如果您要设置一个约定,getBillingWhatever in Order将返回$ billing-> getWhatever()并实现__call以提供此功能,该怎么办?
答案 2 :(得分:0)
我建议你创建一个Address类。如果需要两者,您的Order对象可以有两个属性,BillingAddress和ShippingAddress。您有一个Writer类来为Order创建视图。创建AddressWriter类以创建Address对象的视图。然后你可以做这样的事情:
public function printOrder($order)
{
// print order stuff here...
$addressWriter = new AddressWriter();
echo "<h1>Billing Address</h1>";
$addressWriter->printAddress($order->getBillingAddress);
echo "<h1>Shipping Address</h1>";
$addressWriter->printAddress($order->getShippingAddress);
// print more order stuff ...
}
答案 3 :(得分:0)
拥有子类保持对父类的引用会拉紧耦合。如果必须这样做,我建议你让父母成为一个接口,并让孩子参考接口。或者,您可以尝试通过关联数组或数据容器将相关信息传递给子类。