最近重构应用,设计应用架构的时候,给新宁皓选择的是一种流式架构,感觉很好,一切都规规矩矩,整整齐齐,可扩展性也更强了。这种流式架构主要使用了 CQRS(命令与查询责任分离) 这种模式。
使用这种构架,在应用要去做一些事情,可以执行一个命令(Command),每个命令都有跟自己对应的处理器,应用里发生了什么事情,可以发布一个事件(Event), 事件都有对应的处理器。另外还有一种叫 Saga 的东西,它会监听应用里发生的所有的事情,我们可以在 Saga 里面继续处理事件,事件流是 Observable,所以可以使用 Rxjs 提供的各种操作员帮忙来处理。
比如应用要创建一个新的用户,可以触发一个创建用户命令(CreateUser),在命令对应的处理器那里可以去完成一些处理,比如把用户数据存储在数据仓库里,然后可以再发布一个用户已被创建(UserCreated)的事件,在对应的事件处理器那里可以对这个事件做出反应,比如在某个数据仓库里记录一下这个事件。另外在应用里还可以再定义一个 Saga,过滤出 UserCreated 事件,可以在这个 Saga 里继续处理这个事件,比如执行一个新的命令给用户发送一封欢迎邮件之类的。