不建议实体之间的双向关系有哪些技术原因?它是否会影响ORM的性能? (如果是这样,为什么?)
来源:
答案 0 :(得分:2)
在你提到的第一个来源中提到了三个原因:
这有几个好处:
- 域模型中的耦合减少
- 您的域模型中的更简单的代码(无需正确维护双向性)
- 较少为Doctrine工作
在第二个:
双向协会是开放的
我认为这些是为什么。 “减少工作原则” 和 “是开销” 最有可能意味着它会影响性能,我不会知道怎么解释那个...
有道理,因为只要你在双向关系中改变某些东西,ORM就需要更新双方。
答案 1 :(得分:0)
除了源代码中提到的原因(以及Wilt的回答)在实体之间存在很多关系,因此更容易违反单一责任并使代码更复杂。
举个例子,我想从代码的某个部分更新用户的电话号码。我目前只能访问用户所属的组织。如果我在实体之间有完整的连接路径,我可以这样做:
foreach ($organization->getDepartments() as $department) {
if ($department->getName() == 'sales') {
foreach ($department->getMembers() as $member) {
if ($member->getName == 'Kevin') {
$member->setPhoneNumber(012343929394);
}
}
}
}
这是个人偏好,但我认为让这类事情难以做是一个好主意。相反,您将在专用服务中从数据库中获取基于名称的成员以编辑用户信息。这意味着您的逻辑更加封装。如果UserEditService无法访问任何地方的所有内容,那么处理代码的新开发人员将更有可能寻找它。