首页 > 解决方案 > 试图找出一些代码逻辑发生在 Clean Architecture 的哪个层

问题描述

在通过ResoCoder的精彩教程了解了 Flutter 上的 Clean Architecture 之后,我正在尝试将我的副项目转换为 Clean Architecture。

但是,在尝试查看我的应用程序的某些组件位于哪一层时,我遇到了一些困难。

我的应用程序由速度测试和 UI 组成,它显示:

在后台,当用户开始速度测试时,应用程序从 URL 下载文件(但不存储)。随着下载的进行,带宽和针的角度都被计算出来,两者都是实时的。

那么我该如何定义我的速度测试功能呢?到目前为止,我打算有以下用例:

我喜欢这种方法,因为每个关注点都很好地分开。但是我应该使用一个用例吗?但这意味着只有一个 repo > 数据源将执行下载、计算带宽和计算角度。它不会破坏 SOLID 的单一职责原则吗?

但是,如果我使用所有三个用例,则意味着以下流程:

  1. UI > BLoC 事件 > 开始速度测试 > 下载文件 > 文件块下载 > BLoC 状态 > UI
  2. 然后 UI > BLoC 事件 > 计算带宽 > 测量带宽 > BLoC 状态 > UI
  3. 然后 UI > BLoC 事件 > 计算针角 > 新角度 > BLoC 状态 > UI

这是正确的,正确的方法吗?

您还可以看到,在每个流程中,结果一直返回 UI(通过 BLoC 状态),只是为了让 UI 触发新事件以请求更多内容。这也是正确的还是应该由 BLoC 自己完成并将最终结果(测量的带宽 + 针角)打包到 UI 中?BLoC 可以做出这样的决定还是应该由 UI 决定?

基于最后一个问题,我想说关于清洁架构还有一些我不理解的地方:谁拥有功能如何表现的权威?采用我提到的这些设置(+ 一个):

老实说,我在哪里定义并在代码中编写这些设置/规则?我会在用例中下注,因为我在那里读过

该层中的软件包含特定于应用程序的业务规则。

但是...关于 UI,这是否意味着用例应该说明 UI 的外观?还是相反?例如,它是否应该告诉 UI 如何使用特定角度的所有关键速度标记构建仪表?好像很纠结...

这么多问题......我希望你能理解并帮助我!提前感谢一堆。

标签: flutterclean-architecture

解决方案


在决定如何按照 SRP 将业务逻辑构建到不同的用例中时,建议这样做。这可能会导致许多小型用例。在 Clean Architecture 中,没有任何地方声明不能组合用例来实现更大的用例(工作流程)。因此,无需往返 UI 即可实现全部功能。

关于您的最后一个问题:您的所有业务规则、任何公式和决策代码都应位于用例层中。用例层将决定带宽单位(可能基于某些配置),演示者将其转换为字符串,视图最终将显示该字符串。

UI 的布局(屏幕定位)和样式(例如颜色)当然是在 UI 层中定义的。

有关清洁架构中用例的更详细说明,请查看我的博客文章: http ://www.plainionist.net/Implementing-Clean-Architecture-UseCases/


推荐阅读