删除/不删除依赖对象的逻辑在哪里属于DDD?
例如,其中一个类别包含产品:
class Category
{
IList<Products> products;
}
规则可能是除非没有产品,否则无法删除该类别。
逻辑属于哪里,在删除之前检查此类别下没有产品?
答案 0 :(得分:2)
重要的是要记住,像大多数关于软件设计的想法一样,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...
}
}
答案 1 :(得分:0)
通常,聚合根将管理子实体的生命周期。