我最近读了" Clean architecture ";鲍勃·马丁著。尽管他在那里解释的原则适用于所有语言,但我很难掌握JavaScript(一般的函数式语言)的这些概念。
我有一个React应用程序,我已经应用了React Redux,但现在当我读了这本书,我想知道我是不是太依赖Redux,我怎么能让自己更独立,这样我就可以很容易地替代Redux与任何其他方法(例如React Hooks)任何时候我想。
Bob Martin强调了我们需要小心架构边界的事实,但是我真的不确定在这种情况下我可以把Redux放在哪里?
我在Redux中做业务逻辑吗?如果是,这是否违反了保持业务逻辑独立的Clean Architecture建议?如果我把我的逻辑放在Redux里,我会变得太依赖它吗?
我有我的纯视图组件只显示数据在他们他们一些viewModel组件处理视图逻辑,但从那里我不确定接下来会发生什么。
一般来说Redux是一个状态容器。Redux可以用来实现facebook为客户端应用程序创建的Flux架构,通常在React中实现,因此名为Redux。
Redux通常位于UI层. 从架构的角度来看,它的使用类似于MVC中的控制器和模型。例如,视图分派一个动作来描述应该做什么。这个动作被分派给执行逻辑(类似于控制器)和更新存储(一种模型)的reducer。在商店更改视图呈现器之后。
由于Redux只是一个状态容器,您也可以在其他层中使用它。希望不是直接的,因为框架属于干净架构的外围。因此,您应该创建一个很好的抽象,并在该抽象背后使用Redux(仅在实现中)。
编辑
如果我有一个用例交互器类。例如,我可以在reducer中调用它,保持用例交互器类中的业务逻辑独立于redux层?
是的。让我试着想象一下我的意思。你有两个句柄两种动作同步和异步动作
Forsync actionsreducer接受action参数,将其转换为请求模型,调用用例并使用响应模型更新状态。
+------+ +--------+ +---------+ request +----------+
| | | | | | -------> | |
| View | ---> | Action | ----> | Reducer | | Use Case |
| | | | | | response | |
+------+ +--------+ +---------+ <------- +----------+
^ |
| | update
| V
| +---------+
| notify subscribers | |
+------------------------ | Store |
| |
+---------+
Forasync actions异步思维将动作转换为请求模型,调用用例,当它返回响应模型时,它将响应模型传递给reducer以更新状态。
+------+ +---------+ request +----------+
| | | Async | -------> | |
| View | ---> | Thunk | | Use Case |
| | | | response | |
+------+ +---------+ <------- +----------+
^ |
| |
| V
| +---------+
| | |
| | Reducer |
| | |
| +---------+
| |
| |
| V
| +---------+
| | |
+- ----- | Store |
| |
+---------+
Redux应该是中间件的一部分。