java - 域模型中是否可以接受实体循环引用?

标签 java oop

我见过很多设计有循环引用的域。下图描述了一个简单的例子来理解这个问题:一个公司有员工和部门,一个部门有员工,他们属于一个部门。

从逻辑上讲,该模型允许为一家公司工作的员工与另一家公司的部门相关 - 当然,假设是,如果业务逻辑验证失败。

在一些更复杂的情况下,根据业务规则,我看不到另一种建模方式。

可以接受吗?

提前致谢。

Simple Cirular Reference Example

最佳答案

有这样的循环关联绝对没问题。

当然,有很多陷阱会让您措手不及。然而,如果格外小心,这种关系并不总是有害的。

需要特别注意的事项包括:

  • 尝试定义关系的“所有者”。如果您要保留实体,这一点尤其重要
  • 确保所有权关系不是循环的。例如,在您的示例中,您可以定义 Company 拥有 Company-DepartmentCompany-Employee 关系,以及 Department 拥有 Department-Employee 关系
  • 确保关系一致。例如,对于 EmployeeDepartment 之间的双向关系,当您从 Department 中删除 Employee 时,请确保您始终从 Employee 中删除 Department
  • 尽量减少处理关系的方式。例如,不要同时提供 Department#addEmployee(Employee)Employee#addDepartment(Department),只需提供 Department#addEmployee(Employee) .这将使您保持一致性的工作更加轻松。

不过,如果你能设法让它成为单向的和非圆形的,它总是更容易处理。

关于java - 域模型中是否可以接受实体循环引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28846307/

相关文章:

java - 禁用或取消部署我的应用程序后计划仍在运行

java - 更正我从 SimpleDateFormat 输出的日期

java - Tomcat 7 ClassNotFoundException : org. apache.tomcat.JarScanner

c++ - "Multiplicity of implementation"- 如何处理?什么 's the ' name' 这样的东西?

C++ 使用函数指针重写纯虚函数

PHP 方法链接设置和获取值

java - spring new operator 有什么作用

java - 使用仅在运行时可获得的静态类型

matlab - 常量属性中方法的函数句柄

java - OOP 设计 - 需要准备每个方法调用并在之后清理