如何将业务逻辑与Rx分开

时间:2018-04-25 08:34:27

标签: typescript reactivex clean-architecture

我想申请Uncle Bob's clean architecture。它限制应用程序核心 - 实体和业务逻辑 - 与外部世界无关,尤其是特定的框架选择。

至少在理论上,我理解如何分离UI框架,DBA等。但是,我想使用Rx作为我的异步解决方案,我想知道我是否也可以将它分开。

假设我正在编写客户端身份验证缓存,并且它可以提供登录证书(如果缓存中存在),并在需要时从服务器获取它。然后我需要一个IServer接口(只有接口,具体实现将是'外层'关注):

interface IServer {
    getCertificate(phone: string, password: string): Observable
}

我可以以Observable

以某种方式反转这种依赖性吗?

我现在可以想到的解决方法是使用普通的旧回调样式

interface IServer {
    getCertificate(phone: string, password: string, callback: () => Void)
}

这是唯一的方法吗?

或者

首先,我应该将Rx与我的逻辑区分开来吗?

第二个想法:我的项目中是否包含任何抽象接口/协议标准? (p.s.我使用打字稿)

然后问题就变成了:我的业务逻辑依赖于一个抽象的ReactiveX接口定义,我可以继续使用它。我可以将它视为我必须在早期阶段做出的基本选择,如编程语言选择。

1 个答案:

答案 0 :(得分:0)

在干净的体系结构中,实际的线程和缓存实现是应该远离业务逻辑的细节,而是例如留在门口。

那就是说Observable就像承诺一样,用来抽象线程。如果Observable接口和类来自ur语言标准库,比如.Net在您的业务逻辑中使用它们可能不是一个问题。另一方面,如果这些接口和类来自第三方库,您应该小心并且可能要考虑将这些接口抽象出来,例如:使用适配器和工厂模式来保持业务逻辑的清洁。

更新:有关"如何在Clean Architecture中集成框架的更详细讨论"请参阅我的博文http://www.plainionist.net/Implementing-Clean-Architecture-Frameworks/