在 Clean Architecture 中建立工作流和组件间通信
Establish a workflow and inter-component communication in Clean Architecture
我正在构建一个由 3 个组件组成的应用程序,每个组件都包含一个 GUI 部分(视图、控制器、演示器)和一个域部分(用例和实体)。有一个通用的基础设施组件(数据库)。有了这个,我试图坚持干净的架构原则:对领域层的依赖,并使用依赖倒置来启用绿色箭头指示的控制流
组件的使用有特定的顺序(工作流程)。当一个组件达到某个状态时(可以是用户启动的或者在域层中完成一些工作之后),下一个组件需要被初始化并且 GUI 需要移动到下一个 view/page。此外,每个工作流程步骤都会产生一个输出,作为下一步的输入,从而设置下一个组件的状态(从左到右的黑色虚线箭头)。此数据(ID:字符串,Matrix3D:4x4 矩阵)需要跨组件进行通信。
什么(以及为什么)是实现工作流逻辑的好解决方案(即在哪一层),即(取消)激活组件并启动到新“view/page”?
例如我可以在所有其他域组件之上添加另一个域组件,它停用当前组件,初始化下一个组件,并在视图组件中启动转换。
例如我可以在所有其他 GUI 组件之上添加另一个 GUI 组件,以启动视图中的转换。视图初始化完成后,就可以启动相应域组件的初始化了。
什么(以及为什么)是跨组件传输数据的良好解决方案?
- 例如,我可以通过基础设施层传送数据。
- 例如,我可以将需要在组件之间交换的所有数据传递到 GUI 层(尽管 GUI 中不需要所有这些数据)并在那里管理数据交换。
- 例如,我可以直接在域层进行通信(例如,使用消息系统)。
听起来您需要一个总体 GUI 组件来代表实际工作流并使用其他组件的实例。大多数 UI 框架都可以帮助您进行此类组合。由于您没有告诉我们您使用的是哪个框架,因此您必须使用框架文档来弄清楚。
通常确保在父子组件之间创建松耦合,以确保从属组件可以独立重用。
还有一件事你没有要求 - 在你的图表中,所有组件都在底部使用相同的 DB 块。不清楚这到底意味着什么,但要确保每个组件都有自己独立的持久性,例如单独的表。任何将状态从一个组件传递到下一个组件的需要都应该通过拥有数据的组件的 API 而不是通过直接共享的数据库表。
我正在构建一个由 3 个组件组成的应用程序,每个组件都包含一个 GUI 部分(视图、控制器、演示器)和一个域部分(用例和实体)。有一个通用的基础设施组件(数据库)。有了这个,我试图坚持干净的架构原则:对领域层的依赖,并使用依赖倒置来启用绿色箭头指示的控制流
组件的使用有特定的顺序(工作流程)。当一个组件达到某个状态时(可以是用户启动的或者在域层中完成一些工作之后),下一个组件需要被初始化并且 GUI 需要移动到下一个 view/page。此外,每个工作流程步骤都会产生一个输出,作为下一步的输入,从而设置下一个组件的状态(从左到右的黑色虚线箭头)。此数据(ID:字符串,Matrix3D:4x4 矩阵)需要跨组件进行通信。
什么(以及为什么)是实现工作流逻辑的好解决方案(即在哪一层),即(取消)激活组件并启动到新“view/page”?
例如我可以在所有其他域组件之上添加另一个域组件,它停用当前组件,初始化下一个组件,并在视图组件中启动转换。
例如我可以在所有其他 GUI 组件之上添加另一个 GUI 组件,以启动视图中的转换。视图初始化完成后,就可以启动相应域组件的初始化了。
什么(以及为什么)是跨组件传输数据的良好解决方案?
- 例如,我可以通过基础设施层传送数据。
- 例如,我可以将需要在组件之间交换的所有数据传递到 GUI 层(尽管 GUI 中不需要所有这些数据)并在那里管理数据交换。
- 例如,我可以直接在域层进行通信(例如,使用消息系统)。
听起来您需要一个总体 GUI 组件来代表实际工作流并使用其他组件的实例。大多数 UI 框架都可以帮助您进行此类组合。由于您没有告诉我们您使用的是哪个框架,因此您必须使用框架文档来弄清楚。
通常确保在父子组件之间创建松耦合,以确保从属组件可以独立重用。
还有一件事你没有要求 - 在你的图表中,所有组件都在底部使用相同的 DB 块。不清楚这到底意味着什么,但要确保每个组件都有自己独立的持久性,例如单独的表。任何将状态从一个组件传递到下一个组件的需要都应该通过拥有数据的组件的 API 而不是通过直接共享的数据库表。