如何通知父对象子对象已更改?

时间:2019-01-14 18:39:17

标签: php design-patterns

如果我需要使对象知道其状态变化,则将所有属性设为私有,并为它们添加设置器和获取器。

如果对象的属性是另一个对象怎么办? 我可以通过与get方法链接来获取它,对其进行更改,而父对象对此一无所知。

我认为这是一个常规问题,应该有传统的解决方案。我应该读什么模式?

实际上,子对象还有另一个对象,我想通知主要的父对象。递归

1 个答案:

答案 0 :(得分:0)

此问题的最简单解决方案是仅允许通过根实体进行子级变异,这意味着理想情况下您不会公开访问器来检索子级,如果这样做,则将返回副本以保留封装。这种方法通常与行为丰富的领域模型非常吻合。

但是,如果要对大型的图状结构建模,则上述方法可能不太实用。在这种情况下,您可以依靠Observer Pattern或其任何变体的实现。

请注意,对非常大的根实体建模通常是一种代码味道,可能会导致性能问题和并发冲突。根实体的大小仅应与保护业务不变性所需的大小相同。