remesh-js / remesh

A CQRS-based DDD framework for large and complex TypeScript/JavaScript applications

Home Page:https://remesh-js.github.io/remesh/dist/index.html

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ListModule 暴露 event 的必要性?

ScarboroughCoral opened this issue · comments

在看 TodoList example 时发现event产生依赖于TodoListModulecommand,但是 command 实现细节是在remesh 内部的,需要使用者确定command确实对list产生了修改,如果ListModule对外暴露ListChangedEvent、ListItemAddedEvent等事件,外部就确定事件已发生可以直接使用。不知道有没有必要呢?如果有必要的话我想尝试提一下pr~
image

@ScarboroughCoral ListModule 不暴露 Event 是已知的问题。最初是添加了 ItemAddedEvent, ItemDeletedEvent, ListChangedEvent 等事件,但后面发现,这些事件无法可靠地触发,因为 SetListCommand 可以将 List 整体替换,其中有些可能是 add 的新元素,有些可能是 delete 了,而有些可能 re-order 了。

这将导致业务逻辑依赖 ItemAddEvent 时,有些不是通过 AddItemCommand 添加的 added items 可能不会触发。

正因如此,remesh 才意欲引入 entity-component-systementity-relationship model 等模型,掌控底层 state 的表征方式,以便得到更可靠的 state related events。

目前的折衷做法是,ListModule 自身不暴露 event,由上层 domain 自己管理自己的 event 并保证它们的可靠性。后续 remesh 升级后或许会克服这类问题。

好的 确实是这样 了解了