J Oliver CommonDomain:为什么当聚合不存在时EventStoreRepository.GetById打开一个新流?

时间:2011-09-14 13:27:09

标签: cqrs

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

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

谢谢,

1 个答案:

答案 0 :(得分:2)

这对我来说是一个愚蠢的设计决定。我在这一个上来回走动。说实话,我还是来回徘徊。

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

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