我想用Django示例说明我的问题的一般性质:
class Person(models.Model):
team = models.ForeignKey(Team, related_name='member', on_delete=models.CASCADE)
class Team(models.Model):
pass
此处的目标是创建一个关系,表示一个人可以与一个且仅一个团队相关联的事实。
但是,是否违反SRP,Person实体知道团队实体,反之亦然?
我宁愿写点像
class Person(models.Model):
pass
class Team(models.Model):
members = models.OneToMany(Person, related_name='team', on_delete=models.CASCADE)
因此,每当引入新的 Entity -to-Person关系时(或者,现有的关系被删除),就不需要更新Person模型。
答案 0 :(得分:0)
对象之间的关联不能定义责任。显然,您不希望将不相关的对象与给定的实体相关联,但这更多的是关于良好的设计而不是关于责任的事情。
责任与行为更紧密相关。也就是说,您不希望桌子试图管理团队,但是分配了团队领导角色的团队成员应该能够管理团队。因此,团队领导管理团队成员及其需求,而团队负责人也无法定义如何支付团队成员的薪水。
顺便说一下,它可能取决于您实际使用的范例和模式来实现您的解决方案。如果您将实体实现为active records,我会关注行为。否则,大多数功能将进入service layer。