DDD Пример зависимости - PullRequest
0 голосов
/ 04 августа 2020

Думаю реализовать DDD. Вот пример:

У меня есть 2 объекта домена: Identity и Pool

public class Identity
{
  public Guid Id { get; private set; }
  public string Name { get; private set; }
  public bool Active { get; private set;}
  public Guid PoolId { get; private set;}
  ....

  public static Identity Create(){...}

  public void Enable(){...}
  public void Disable(){...}
  public void UpdatePassword(){...}
  ...
}

public class Pool
{
  public Guid Id { get; private set; }
  public string Name { get; private set; }
  public bool Active { get; private set;}
  ....

  public static Pool Create(){...}

  public void Enable(){...}
  public void Disable(){...}
  public void Archive(){...}
  ...
}

Проблема: «Я хочу добавить проверку / проверку, если пул уже заархивирован или отключено, identity.Enable(), identity.Disable(), identity.UpdatePassword() не может быть выполнено (возможно, вызывает исключение, что пул уже заархивирован) ".

Мои вопросы:

  1. Какой уровень должен обрабатывать этот логи c? Domain Logi c или Application logi c?
  2. Как мне это реализовать?

Может ли кто-нибудь помочь мне подробнее объяснить это?

Примечание: Они не находятся на разных машинах (или микросервисах), они используют одну и ту же базу данных.

1 Ответ

0 голосов
/ 05 августа 2020

Всякий раз, когда B C зависит от данных из другого, у вас, вероятно, будет сценарий возможной согласованности.

Вы можете сохранить Pool как объект значения в зависимом B C и обновлять свои данные на основе, скажем, событий, полученных от восходящего B C, или вы можете сохранить данные Pool как VO на самих зависимых объектах. Это будет приговор с вашей стороны. Поскольку у вас будут соответствующие данные локально, вы можете проверить их локально. Однако это не гарантирует, что данные не устарели. После того, как данные будут изменены для обеспечения согласованности, вы должны будете убедиться, что компенсируете любые неправильные изменения.

Логи вашего домена c требуется для обеспечения соблюдения инвариантов. Мне нравится передавать в домен любые данные, которые могут потребоваться для обеспечения соблюдения этих инвариантов. В вашем случае проблема интеграции / приложения будет извлекать текущий статус пула и передавать его в метод домена в качестве параметра. Это позволяет упростить тестирование. Вы можете решить перенести эту ответственность из домена во многом так же, как это делается с авторизацией, но, опять же, это ваш вызов и YMMV. должен быть выполнен. То же самое касается заказа товаров в Интернете. Возможно, вы добавили товар в корзину, но при оформлении заказа этот товар больше не доступен.

...