我有一个项目,其中我有1->N关系:一个人至少需要有一只宠物。由于这条规则,我们不能养一个没有宠物的人。
有一个PetRepository和一个具有删除功能的PersonRepository。
删除宠物时,干净架构中推荐的方法是什么?
1. 在域中检查是否是该人唯一的宠物:如果是,则删除该人,如果不是则删除宠物
2. 以强制数据库中数据完整性的方式实现 PetRepository 删除方法,例如通过删除宠物。
一个人至少需要养一只宠物。由于这条规则,我们不能养一个没有宠物的人。
这听起来像是属于 Person 域概念的不变量。
因此,为了保持一个人的数据一致,我希望它有一个功能,如果它属于这个人,你可以删除它。然后在同一功能中,您可以检查是否还有宠物,如果没有,也删除该人。
就像这个伪代码一样:
public class Person
{
public Collection<Pet> Pets { get; private set; }
public bool Deleted { get; private set; }
public Result RemovePet(PetId petId)
{
var pet = Pets.Find(petId);
if(pet == null)
{
return Result.Failed(PersonErrors.PetNotFound);
}
Pets.Remove(pet);
if(Pets.Count == 0)
{
Deleted = true;
}
return Result.Success();
}
}
现在,您通过 Person 存储库保存此 Person 域模型,并且存储库应该确定数据应保存到哪个表。