Передача текущего объекта службы в домен будет анти-паттерном для DDD? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть служба, которая получает домен из репозитория и передает свой экземпляр в домен для некоторой внешней зависимости. Может ли это стать анти паттерном? RichDomainModel предлагает передать зависимость в домен по мере необходимости, однако меня беспокоит, можно ли это назвать циклической c зависимостью и станет ли она анти-паттерном?

class Order
{
  private $currencyVal;

  public function __construct()
  {

  }

  public function processBusinessLogic($arg1, $arg2)
  {
      // do some business logic operation on $arg1, $arg2 & $this->currencyVal
  }

  public function populateExternalValue(OrderService $service)
  {
    $this->currencyVal = $service->getCurrencyValue($this);
  }
}


OrderService 
{
  private $orderRepository;
  private $externalServiceClient;

  public function __construct(OrderRepository $orderRepository, Client $externalServiceClient)
  {
    $this->orderRepository = $orderRepository;
    $this->externalServiceClient = $externalServiceClient;
  }

  public function processDomain(Request $request)
  {
     $order = $this->orderRepository->findById($request->orderId);
     $order->populateExternalValue($this);
     $order->processBusinessLogic($request->arg1, $request->arg2);
     $this->orderRepository->save($order);
  }

  public function getCurrencyValue(Order $order) 
  { 
    return $this->externalServiceClient->getValue($order->currency)
  }
}

В качестве альтернативы я мог бы использовать что-то подобное, но что приведет к AnemicDomainModel

$order->setCurrencyValue($this->getCurrencyValue($order));

Мысли?

1 Ответ

0 голосов
/ 10 марта 2020
  1. Это определенно цикличная c зависимость, и это анти-паттерн.
  2. Если вы хотите обогатить модель предметной области, логика c, окружающая $currencyVal, должна выйти OrderService и Order.
  3. Поскольку логика c зависит от $externalServiceClient, этот клиент также перейдет в Order.
  4. Обратите внимание, что модель домена c anemi является анти-паттерном OOP; но вам не нужно делать OOP. Модель богатого домена имеет смысл, если у вас есть богатый домен. Для базового c CRUD-приложения с очень небольшим количеством логик c это может быть чрезмерно инженерно.
...