【发布时间】:2018-10-22 05:02:31
【问题描述】:
背景
我正在尝试将 ddd 和事件溯源应用到我的部分项目中。
这是一个拍卖应用程序。
-
Customer注册Item和Auction是STARTED当管理员approvesItem。 -
Auction具有duration,它允许Bidder到Bid在duration内。 -
Auction被视为ENDED,之后duration和Bidder无法出价。 -
当
maximum bids limit遇到时Auction也是ENDED,即使duration没有通过。 -
Customer可以在duration和5 days after the duration ends中使用select一个Bid。 - 之后,我们认为
AuctionEXPIRED和Customer不能select和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 事件。此外,如果我使用计划任务管理到期,感觉就像我的域模型假设读取端的简单性与应用程序要求高度相关。
如果你遇到过类似的问题,请帮我谈谈你的经验。
【问题讨论】:
标签: domain-driven-design cqrs event-sourcing