父/子关系 - 我应该在孩子中存储对父母的引用吗?

时间:2014-09-04 09:56:09

标签: php oop relationship

我有两节课。 OneToMany关系中的父母与子女。 Parent有一个名为$ children的数组,它存储Child实例。 Child具有私有$ name属性,具有公共getter / setter方法。我想要有独特名字的孩子。

我解决这个问题的方法是,我将父实例传递给Child的构造函数方法,将其存储在$ _my_parent中,并将其存储在Child的setName($ name)方法中。 Parent实例循环所有子节点并检查是否可以使用$ name。

非常直接。

Q1:这显然会产生无限递归。那是问题吗?序列化时?

Q2:还有另一种方法吗?

1 个答案:

答案 0 :(得分:2)

虽然这种方式100%保证数据完整性在理论上可能是好的,但在实践中它无论如何都无法实现。您始终可以在对象上设置属性,使其不唯一,例如使用Reflection API。

我保持简单:

  • 您的子对象是哑数据对象,他们对父对象一无所知并且是自包含的
  • 父级只保存子对象,它不会将自身注入其中
  • 在父对象另一个外部类中,有一个验证方法,通过迭代子项并确保它们的唯一性来检查父子组合是否有效

只要在必要时明确调用此验证方法,无论何时修改孩子,都不要自动触发。它摆脱了很多复杂性和问题,而且缺点很少。