Events 事件存储中的事件模型或架构

Events 事件存储中的事件模型或架构,events,event-sourcing,json-api,Events,Event Sourcing,Json Api,事件存储(事件源)中的事件通常以序列化格式持久化,版本表示事件类型的模型或模式中的更改。我还没有找到好的文档来显示实际事件的实际模型或模式(如果使用RDBMS,通常是事件存储模式中的datatable),但我知道理想情况下它应该是通用的 事件中应该存在哪些最基本的字段/属性? 我已经考虑过使用json api作为我事件的规范,但这可能太“沉重”。我看到的好处是灵活性和成熟度 我是不是走错了路? 任何定义良好的示例都将不胜感激。只需使用映射到Json的基本类型进行建模,就像编写API一样,就可以走

事件存储(事件源)中的事件通常以序列化格式持久化,版本表示事件类型的模型或模式中的更改。我还没有找到好的文档来显示实际事件的实际模型或模式(如果使用RDBMS,通常是事件存储模式中的
data
table),但我知道理想情况下它应该是通用的

事件中应该存在哪些最基本的字段/属性?

我已经考虑过使用json api作为我事件的规范,但这可能太“沉重”。我看到的好处是灵活性和成熟度

我是不是走错了路?


任何定义良好的示例都将不胜感激。

只需使用映射到Json的基本类型进行建模,就像编写API一样,就可以走很长的路

如果使用太多的工具,您可能会花费大量时间来生成过于复杂的模型——像Apache Thrift和/或协议缓冲区(或派生的东西)之类的东西将为您提供各种IDL机制来生成附带的复杂性

在.NETLand和许多其他平台中,如果为类型命名,则可以从类型中进行各种投影

就我个人而言,我在F#中使用了记录和DU作为设计和表示工具

  • 您可以从F#或C#免费获得智能感知、语法照明和类型
  • 如果有人想查看,
    types.fs
    提供了他们所需要的一切
我已经考虑过使用json api作为我事件的规范,但这可能太“沉重”。我看到的好处是灵活性和成熟度

我是不是走错了路

不要忽视向前和向后的兼容性

你应该计划复习一下格雷格·杨的书;它并没有直接回答你的问题,但它确实涵盖了很多解释事件的基础知识

简短回答:几乎所有内容都是可选的,因为您需要能够在以后更改它

您还应该回顾Hohpe的企业集成模式,特别是他的工作,其中详细介绍了许多您可能关心的案例

德格劳帮助我理解了一个重要的观点

总而言之:如果可靠性在业务层面上很重要,那么就在业务层面上进行

因此,虽然您可能想进行一些有趣的元数据跟踪,但域模型实际上只会查看数据;这将倾向于特定于您的领域

您还可以发现,在生成事件的服务中使用的事件表示可能与它与其他服务共享的表示不匹配,特别是可能与广播的消息不同

我做了一个练习,试图找出订阅者观看事件所需的最少信息量,以了解它是否关心。我的答案是一个id(我以前见过这个特定事件吗?),一个告诉您消息语义的标记(这是我关心的吗?),以及一个位置(URI),如果它是我关心的,则可以获得更丰富的表示


但在领域之外——例如,当你把系统作为一个整体来看待,试图弄清楚发生了什么,有相关标识符和因果标识符,时间戳,源位置的签名,等等,存储在元数据中的一致位置会有很大帮助。

除非您有意想要一个通用答案,否则您可以添加一个标记,如.net please吗?事件存储也意味着neventstore——如果你指的是Greg Young的GES,那么有一个
get event store
事件存储,事件模式不依赖于.net或neventstore。我非常清楚这一点。关键是,不管好坏,标记事件存储并不是您认为它的意思——它指的是一个.NET存储[通常在SQL DB中使用]。我也不反对你想要一个通用的答案