Состояние в худшем случае DDD. В том числе поле состояния 1) ленивый и еще 2) очень удобный. Да, один из тех компромиссов дизайна.
Когда вы присваиваете статус или читаете статус, вы игнорируете или сублимируете важные бизнес-логики c и структуру вашего домена. При изменении «статуса» в вашем домене могут произойти очень существенные изменения ... выходящие за рамки изменения свойства status .
Выкиньте status и вместо этого рассмотрите некоторые концепции : a CasualShopper или Гость (без покупок, просмотр товаров), PotentialNewShopper (кто-то добавляет вещи в свою корзину, которых вы никогда раньше не видели), и ваш обычный Клиент (который, вероятно, следует подразделить на основе их текущей активности).
С помощью этого смоделированного вы можете прикрепить поведение непосредственно к каждому из этих объектов, и само «состояние» сублимируется в более богатую DDD модель. Распространенной ошибкой DDD не является создание значимого с точки зрения транзакций объекта (например, роли Потенциальный покупатель ) для некоторого статического / невременного объекта (например, человека).
Отсюда вы можете решить, что вам нужно несколько ограниченных контекстов; возможно Потенциальные клиенты и Штатные клиенты . В каждом наборе доменных переходов различны и могут быть инкапсулированы, а не внешне.
Итак ...
С этим не похоже, что у вас есть Клиент B C и Возможный клиент B C. Вы можете безопасно делать то, что вам нужно сделать в последнем, теперь, когда оно автономно.
О, но это может повлиять на выставление счетов! и заказ!
Верно. Это может означать новые BC или новые объекты в таких BC, такие как ProvisionalPayment и UnauthenticatedOrder . Сейчас я немного болтаю ...
Я хочу сказать, что у вас есть события, которые могут переходить между состояниями, а не кодировать эти состояния, и поэтому вы можете прикреплять нужные вам поведения и сохранять их по мере необходимости в некоторых физическое хранилище, которое, скорее всего, разделено так, как вам нужно DDD.
Выполнение всей этой работы означает не обмениваться небезопасным статусом , а обмениваться безопасными проекциями релевантных объектов * только 1054 *.
Кратко и неожиданно переходя к реализации, разработчики Не хотят хранить «временное» состояние. «Временное» состояние можно сохранять и необходимо, когда вы моделируете домен без этого поля cruddy status .