Где логика переопределена для удаления зависимых объектов в доменно-управляемом дизайне (DDD) - PullRequest
4 голосов
/ 22 июля 2009

Куда относится логика удаления / отсутствия удаления зависимых объектов в DDD?

Например, у каждого есть категория, содержащая продукты:

class Category
{
    IList<Products> products;
}

Может быть правило, что категорию нельзя удалить, если у нее нет товаров.

Куда относится логика, которая проверяет отсутствие продуктов в этой категории перед удалением?

  • Доменные классы - похоже, это бизнес-логика, поэтому я бы предположил, что он принадлежит к доменному уровню.
  • Классы репозитория. Уровень репозитория обрабатывает постоянство, имеет общие методы CRUD, в том числе один для удаления, принадлежит ли логика этому уровню?
  • Другое решение?

Ответы [ 2 ]

2 голосов
/ 22 июля 2009

Важно помнить, что, как и большинство идей о разработке программного обеспечения, DDD - это набор руководящих принципов, а не жестких и быстрых правил, поэтому не стоит слишком сильно беспокоиться о том, является ли то, что вы делаете, настоящим DDD. Как и большинство программных сценариев, ответ таков: «Это зависит».

В этом сценарии рассмотрите возможность использования Спецификации .

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...
  }
}
0 голосов
/ 29 июля 2009

Обычно совокупный корень управляет временем жизни дочерних объектов.

...