Справочная информация
Я пытаюсь применить DDD и источники событий к части моего проекта.
Это аукционная заявка.
Customer
регистров Item
и Auction
равно STARTED
, когда администратор approves
Item
. Auction
имеет duration
, что позволяет Bidder
к Bid
в пределах duration
. Auction
считается ENDED
, после этого duration
и Bidder
не может делать ставки. Auction
также ENDED
, когда maximum bids limit
встречается, даже если duration
не прошло. Customer
может select
один Bid
в пределах duration
и 5 days after the duration ends
. - После этого мы рассмотрим
Auction
EXPIRED
и Customer
не можем select
a Bid
.
Требования к приложению:
Bidder
должен иметь возможность запрашивать аукционы с аукционом. - Должен отправлять уведомления о
ended
и expired
аукционах только один раз.
Подводя итог, я определил свойклассические модели доменов DDD:
Объекты: Auction
, Bid
, Customer
, Administrator
, Bidder
Объекты значений: AuctionStatus
(STARTED
, ENDED
, EXPIRED
, SELECTED
)
Совокупные корни: Auction
, Customer
, Bidder
, Administrator
Задача
Проблема в том, что я не уверен, стоит ли мне
A) определять спецификацию, такую как AuctionEndedSpecification
, и использовать ее для запроса и оценки статуса и действий ограничения.
или
B) рассмотрите EndAuction
как команду и вставьте простой атрибут status
в Auction
хитрая часть A: чтобы судить, истек или закончился аукционМне нужно текущее время, и это делает код сложнеереализовать.И я думаю, что это может быть сложнее реализовать на стороне запроса.
хитрая часть B: Аукцион заканчивается по нескольким причинам (по истечении срока, когда встречается ограничение максимальной ставки).Я узнал, что не стоит позволять событию вызывать другое событие.Но в этом случае событие BidAdded
может вызвать событие AuctionEnded
.Кроме того, если я справляюсь с истечением срока с запланированными задачами, мне кажется, что моя модель предметной области предполагает простоту чтения, что тесно связано с требованиями приложения.
Если вы столкнулись с подобными проблемами, пожалуйста, помогите мнеопыт.