删除/不删除依赖对象的逻辑在哪里属于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...
}
}