1

请解释在聚合不存在时使 EventStoreRepository.GetById 创建新流的原因。这种行为似乎赋予 GetById 双重责任,在我的情况下可能会导致不良结果。例如,我的聚合总是为它们的创建实现一个工厂方法,以便它们的第一个事件导致聚合 ID 的设置。如果在聚合存在之前处理了一个命令,即使聚合没有设置它的 Id 或初始化其他状态(crash-n-burn 与空引用异常同样可能),它也可能成功。

如果聚合不存在以防止过早创建和命令处理,我宁愿让 GetById 抛出异常。

4

1 回答 1

2

这对我来说是一个愚蠢的设计决定。我在这个上来回走动。老实说,我仍然在这方面来回走动。

问题是异常应该真正用来表示异常或意外情况。问题是找不到流可能是常见操作,在某些方面甚至可能是预期操作。我修改了抛出异常、返回 null 或返回空流的想法。

确定聚合是否为空的方法是检查 Revision 属性以查看它是否为零。

于 2011-09-19T11:38:02.330 回答