设计模式 – 逻辑在哪里可以删除域驱动设计(DDD)中的从属对象?

删除/不删除依赖对象的逻辑在哪里属于DDD?

例如,一个包含产品的类别:

class Category
{
    IList<Products> products;
}

规则可能是除非没有产品,否则无法删除类别.

逻辑属于哪里,在删除之前检查此类别下没有产品?

>域类 – 它似乎是业务逻辑,所以我猜测它属于域层.
>存储库类 – 存储库层处理持久性,它具有一般的CRUD方法,包括一个用于删除,逻辑属于该层?
>另一个解决方案

最佳答案 重要的是要记住,就像大多数关于软件设计的想法一样,DDD是一套指导方针,而不是硬性规则和快速规则,所以不要过分担心你所做的是不是真正的DDD.像大多数软件场景一样,答案是“它取决于”.

在这种情况下,请考虑使用Specification.

Category category; // some category you're working with.
ICategoryRepository _categoryRepository; // some repository.

ISpecification readyForRemoval = new ReadyForRemovalSpecification();

if (readyForRemoval.IsSatisfiedBy(category)
{
  _categoryRepository.Remove(category);
}

public class ReadyForRemovalSpecification : ISpecification<Category>
{
  public bool IsSatisfiedBy(Category category)
  {
    return (category.HasProducts == false);
    // return category.Products.Count = 0; // whatever...
  }
}
点赞