我见过很多设计有循环引用的域。下图描述了一个简单的例子来理解这个问题:一个公司有员工和部门,一个部门有员工,他们属于一个部门。
从逻辑上讲,该模型允许为一家公司工作的员工与另一家公司的部门相关 - 当然,假设是,如果业务逻辑验证失败。
在一些更复杂的情况下,根据业务规则,我看不到另一种建模方式。
可以接受吗?
提前致谢。
最佳答案
有这样的循环关联绝对没问题。
当然,有很多陷阱会让您措手不及。然而,如果格外小心,这种关系并不总是有害的。
需要特别注意的事项包括:
- 尝试定义关系的“所有者”。如果您要保留实体,这一点尤其重要
- 确保所有权关系不是循环的。例如,在您的示例中,您可以定义
Company
拥有Company-Department
和Company-Employee
关系,以及Department
拥有Department-Employee
关系 - 确保关系一致。例如,对于
Employee
和Department
之间的双向关系,当您从Department
中删除Employee
时,请确保您始终从Employee
中删除Department
。 - 尽量减少处理关系的方式。例如,不要同时提供
Department#addEmployee(Employee)
和Employee#addDepartment(Department)
,只需提供Department#addEmployee(Employee)
.这将使您保持一致性的工作更加轻松。
不过,如果你能设法让它成为单向的和非圆形的,它总是更容易处理。
关于java - 域模型中是否可以接受实体循环引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28846307/