清洁架构中的数据完整性实施:域还是数据层?

问题描述 投票:0回答:1

我有一个项目,其中我有1->N关系:一个人至少需要有一只宠物。由于这条规则,我们不能养一个没有宠物的人。

有一个PetRepository和一个具有删除功能的PersonRepository。

删除宠物时,干净架构中推荐的方法是什么?

1. 在域中检查是否是该人唯一的宠物:如果是,则删除该人,如果不是则删除宠物

2. 以强制数据库中数据完整性的方式实现 PetRepository 删除方法,例如通过删除宠物。

repository domain-driven-design clean-architecture business-rules data-integrity
1个回答
0
投票

一个人至少需要养一只宠物。由于这条规则,我们不能养一个没有宠物的人。

这听起来像是属于 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 域模型,并且存储库应该确定数据应保存到哪个表。

© www.soinside.com 2019 - 2024. All rights reserved.