typescript - Clean Architecture 中的双向事件流
问题描述
在我发现的关于干净架构的所有来源中,都提供了类似的事件流:
// View (e.g. user clicked a button) => Domain (use case) -> Data (through repository to datasource) -> Server/Db/etc.
但是对于应用程序,可能需要使用数据层生成的事件,例如 websocket/event sourcing/FCM/等。
所以如果我想实现这样一个远程事件源,我清楚地知道它属于数据层,它实际上是一个数据源。
但是,如果我有一个使用 http 的混合应用程序,并且在某些特殊情况下可以说 FCM,我如何区分我必须订阅的流数据源和 http 数据源。
例如,我有一个文件夹结构:
- data
- datasources
- repositories
- mappers
...
非常简化的 http 数据源和 repo 看起来像这样。
export class PostsRemoteDataSource {
public async getPostsList(){
const result = await fetch(/*...*/)
return result.json()
}
}
// ....
export class PostsRepository {
constructor(
private readonly localDataSource: PostsLocalDataSource,
private readonly remoteDataSource: PostsRemoteDataSource){}
public async getPosts(){
// ...
const remoteData = await this.remoteDataSource.getPostsList()
// ...
}
}
流数据源如下所示:
class PostsRemoteDataSource extends EventListener {
public connect(someCredentials:any){}
public sendMessage(message:any){}
public listen(listener: (data: IPostDTO) => void) {}
}
所以我不明白:
如果存储库必须建立连接并订阅这样的数据源,则用例必须订阅存储库并查看订阅用例或存储库触发数据源事件回调的用例或什么?
也许该流数据源应该属于另一个层/以不同的名称命名,例如 Service/PushService/EventBus/类似的东西,以将其与通常的数据源区分开来?
我为我的英语和演讲道歉,我很难提出这样的问题。
一个很好的例子是一个聊天应用程序,其中一部分必须使用 websocket 进行消息传递,而另一部分则基于 http 进行身份验证/加载用户首选项/等。
解决方案
推荐阅读
- numpy - 基于numpy数组重建图像
- npm - 如何使用 npm Sequqlize 编写带有左连接的嵌套 where 条件
- python - 如何检测操作系统中的浏览器并使用Python打开一个url
- identityserver4 - 如何使用 IdentityServer 存储和管理用户?
- java - 将 Android CameraX 桥接到 React Native
- c - 以下 C 代码的输出是什么?
- php - 如何通过 PHPExcel 导出带有 MySQL 数据的图像
- mule - 如何从邮递员接受任何多部分文件(图像/pdf/csv)并将相同的文件创建到 Mule 4 中的 SFTP 位置?
- php - 从 json 嵌套的嵌套循环中提取所需的信息
- javascript - 在next.js中使用react-awesome-query-builder npm包无法添加多个字段如demo所示