Tag: 事件采购

EventStore与MongoDb

我想知道使用EventStore( http://geteventstore.com )在MongoDb中实现事件源自己的优势。 我问的原因是,我们公司有很多人每天与MongoDb合作。 尽pipe如此,他们不能使用事件采购。 虽然他们并不是完全处于这个问题的黑暗之中,但他们也不打算在任何地方开始实施。 我即将开始一个项目,这非常适合于事件采购。 大约有16个非常明确的事件,大约7个明确的预测。 我说“关于”,因为我知道,一旦他们看到使用的产品,就会有更多的预测和事件的需求。 该方法将首先是API,我们组织的其他部分将使用REST API。 虽然我已经阅读了格雷格·扬(Greg Young)定义的“事件采购”(Event Sourcing)的很多内容,但我从来没有实际采用过事件采购解决scheme 这是一个绿色的田野工程。 由于我们打算将所有内容公开为REST接口,因此没有技术限制。 所以,如果有人有与MongoDb的EvenStore或事件采购的工作经验,请赐教。 还有一个几乎完全不相关的事件采购问题:你有没有直接查询事件存储? 或者你总是会创造新的预测和重播事件来填充这些预测?

CQRS事件采购:validation用户名唯一性

我们以一个简单的“账户注册”为例,这里是stream程: 用户访问网站 点击“注册”button并填写表格,点击“保存”button MVC控制器:通过从ReadModel读取validation用户名的唯一性 RegisterCommand:再次validation用户名唯一性(这是问题) 当然,我们可以通过读取MVC控制器中的ReadModel来validationUserName的唯一性,以提高性能和用户体验。 但是, 我们仍然需要在RegisterCommand中再次validation唯一性 ,显然,我们不应该访问命令中的ReadModel。 如果我们不使用事件采购,我们可以查询领域模型,所以这不成问题。 但是如果我们使用Event Sourcing,我们无法查询域模型,那么我们如何validationRegisterCommand中的UserName唯一性? 注意:用户类有一个Id属性,UserName不是User类的关键属性。 使用事件采购时,我们只能通过Id获取域对象。 顺便说一句:在要求中,如果input的用户名已被占用,网站应该向访问者显示错误信息“对不起,用户名XXX不可用”。 显示一条消息,例如“我们正在创build您的帐户,请等待,我们将通过电子邮件向您发送注册结果”,这是不能接受的。 有任何想法吗? 非常感谢! [UPDATE] 一个更复杂的例子: 需求: 下订单时,系统应该检查客户的订单历史,如果他是一个有价值的客户(如果客户在过去一年每月至less有10个订单,他是有价值的),我们使订单10%的折扣。 执行: 我们创buildPlaceOrderCommand,并在命令中,我们需要查询订购历史logging,看看客户是否有价值。 但是我们该怎么做呢? 我们不应该在命令中访问ReadModel! 正如Mikael 所说 ,我们可以在帐户注册的例子中使用补偿命令,但是如果我们在这个sorting的例子中也使用补偿命令,它会太复杂,代码可能太难维护。

使用RDBMS作为事件采购存储

如果我正在使用RDBMS(例如SQL Server)来存储事件源数据,模式可能是什么样子? 我已经看到抽象意义上谈到的一些变化,但没有具体的。 例如,假设有一个“产品”实体,并且对该产品的更改可以以价格,成本和描述的forms出现。 我很困惑我是否会: 有一个“ProductEvent”表,其中包含产品的所有字段,其中每个更改意味着该表中的新logging,以及适当时候的“谁,什么,何处,何处,何时以及如何”。 当成本,价格或描述发生变化时,会添加一个新的行来表示产品。 将产品成本,价格和说明存储在与外部关系关联的“产品”表中的单独表中。 对这些属性进行更改时,请根据需要使用WWWWWH编写新行。 将“WWWWWH”和表示事件的序列化对象存储在“ProductEvent”表中,这意味着事件本身必须在我的应用程序代码中被加载,反序列化并重新播放,以重build给定产品的应用程序状态。 特别是我担心上面的选项2。 极端地说,产品表几乎是每个属性一个表,在哪里加载给定产品的应用程序状态将需要从每个产品事件表加载该产品的所有事件。 这张桌子爆炸味道对我来说是错误的。 我确信“这要看情况”,虽然没有一个“正确的答案”,但我试图去了解什么是可以接受的,什么是完全不能接受的。 我也知道NoSQL在这里可以提供帮助,在这里可以根据聚合根存储事件,这意味着只有一个数据库请求来获取事件来重build对象,但是我们没有使用NoSQL数据库这一刻,我感觉周围的替代品。