ForeignKey概念是否违反了SRP?

时间:2017-01-18 18:32:41

标签: django design-patterns database-design foreign-keys foreign-key-relationship

我想用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模型。

1 个答案:

答案 0 :(得分:0)

对象之间的关联不能定义责任。显然,您不希望将不相关的对象与给定的实体相关联,但这更多的是关于良好的设计而不是关于责任的事情。

责任与行为更紧密相关。也就是说,您不希望桌子试图管理团队,但是分配了团队领导角色的团队成员应该能够管理团队。因此,团队领导管理团队成员及其需求,而团队负责人也无法定义如何支付团队成员的薪水。

顺便说一下,它可能取决于您实际使用的范例和模式来实现您的解决方案。如果您将实体实现为active records,我会关注行为。否则,大多数功能将进入service layer