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

remesh在逻辑分离的同时怎么考虑到和UI同步的情况呢

FEYeh opened this issue · comments

比如,loading这种场景,或者获取完数据后需要特殊处理的场景,怎么结合remesh起来用呢?
比如我们用AsyncModule,如果还要在页面上监听onSuccess来处理的话,每个请求都要这么写吗

AsyncModule 导出了 AsyncDataQuery,里面包含 5 种互斥的状态 default | loading | success | failed | cancelled ,可以在 View 层通过 useRemeshQuery 直接监听,然后对 5 种状态做不同的 UI 渲染。

useRemeshEvent 可以订阅感兴趣的事件,做一些别的处理,如果有需要的话。

领域相关的逻辑,一般不会在 UI 层监听 onSucess 事件,而是 domain 里的 onSucess 调用了 command 写入了 state,引起 query 的变化,最后同步到 UI 里。

领域相关的逻辑,一般不会在 UI 层监听 onSucess 事件,而是 domain 里的 onSucess 调用了 command 写入了 state,引起 query 的变化,最后同步到 UI 里。

项目中大多数请求都会涉及到message.success或者error,如果是采用Event-Driven的话,异步就特别繁琐,每个请求都要写一个onSuccess的event监听,虽然做到职责分明了,却也增加了很多代码
实际当中存在很多连续请求,并且中间是有各种判断逻辑、参数处理逻辑、UI交互逻辑相互组合存在的,针对这种场景,采用事件订阅具有跳跃性,不如同步代码来得直观

实际当中存在很多连续请求,并且中间是有各种判断逻辑、参数处理逻辑、UI交互逻辑相互组合存在的,针对这种场景,采用事件订阅具有跳跃性,不如同步代码来得直观

Event-Driven 模式确实会比较繁琐,但相比过程式的代码,也保留了很多组合的潜力,每一个异步事件都可以跟其他事件或者指令相结合。

如果感觉太繁琐,也可以把 date-fetching 相关逻辑放到 view 层,对 domain 发送 command 修改内部状态即可;类似于把 remesh 当作 redux 来用。

受教~!感谢~!