我见过很多使用循环引用设计的域名。下图描述了一个理解问题的简单示例:公司有员工和部门,部门有员工,属于部门。
逻辑上,该模型允许为公司工作的员工与另一家公司的部门相关 - 当然,假设业务逻辑验证失败。
在一些更复杂的情况下,根据业务规则,我没有看到另一种建模方式。
可以接受吗?
提前致谢。
答案 0 :(得分:3)
拥有这种循环关系绝对没问题。
当然有很多陷阱可以射击你的脚。然而,这种关系格外谨慎并不总是有害的。
您需要特别注意的事项包括:
Company
拥有Company-Department
和Company-Employee
关系,Department
拥有Department-Employee
关系Employee
和Department
之间的双向关系,当您从Employee
中删除Department
时,请务必从Department
中移除Employee
始终Department#addEmployee(Employee)
。Employee#addDepartment(Department)
和Department#addEmployee(Employee)
,只需提供{{1}}即可。这应该使您的工作更容易保持一致性。尽管如此,如果你能设法使它成为单向和非圆形的,它总是更容易处理。
答案 1 :(得分:1)
如果你真的想避免你所描述的情况(员工“E”与部门“D”相关联,但“D”和“E”与不同的公司相关联),你可以尝试制作你的对象模型是一棵树,没有周期:
Company --> Department --> Employee
这里有一些权衡。例如,这个模型并不直接处理没有部门的员工(尽管这可能与像NoDepartment这样的假部门混淆)。此模型可能还需要两个“跃点”才能从员工到公司。