Я занимаюсь рефакторингом проекта с использованием DDD, но меня беспокоит то, что слишком много сущностей не имеют собственного Агрегированного корня.
У меня есть Store
, в котором есть список ProductOption
s исписок Product
с.A ProductOption
может использоваться несколькими Product
s.Эти сущности, похоже, очень хорошо вписываются в совокупность Store
.
Тогда у меня есть Order
, который временно использует Product
для построения OrderLine
s:
class Order {
// ...
public function addOrderLine(Product $product, $quantity) {
$orderLine = new OrderLine($product, $quantity);
$this->orderLines->add($orderLine);
}
}
class OrderLine {
// ...
public function __construct(Product $product, $quantity) {
$this->productName = $product->getName();
$this->basePrice = $product->getPrice();
$this->quantity = $quantity;
}
}
Похоже, пока DDD соблюдает правила.Но я хотел бы добавить требование, которое может нарушить правила совокупности: владельцу магазина иногда нужно будет проверять статистику о заказах, которые включали конкретный продукт.
Это означает, что в основном мы будемнеобходимо сохранить ссылку на Product в OrderLine, но это никогда не будет использоваться каким-либо методом внутри сущности.Мы будем использовать эту информацию только для целей отчетности при запросах к базе данных;таким образом, было бы невозможно «сломать» что-либо внутри совокупности Магазина из-за этой внутренней ссылки:
class OrderLine {
// ...
public function __construct(Product $product, $quantity) {
$this->productName = $product->getName();
$this->basePrice = $product->getPrice();
$this->quantity = $quantity;
// store this information, but don't use it in any method
$this->product = $product;
}
}
Указывает ли это простое требование, что Продукт становится корнем совокупности?Это также может привести к тому, что ProductOption станет объединенным корнем, так как Product имеет на него ссылку, что приведет к двум агрегатам, которые не имеют никакого значения вне Магазина и не нуждаются в каком-либо Репозитории;выглядит странно для меня.
Любой комментарий приветствуется!