读者好!
之前,我们研究了
VIP周期的安排方式以及如何在价格和数据传输之间进行转换。 现在,您需要弄清楚如何从过多的逻辑中卸载我们的
Interactor ,并取出其中的一部分以供其他场景重用。
工人们将为此提供帮助。 该主题的规模不大,但值得一提。

理论
工人是辅助类/结构(不要与服务或帮助程序混淆),其任务是接管
Interactor的业务逻辑的一部分。 如果
Interactor中的方法
正在扩展,那么该抽出
Worker中大量逻辑的时候了。 在
Clean Swift中,它们用于处理数据存储逻辑,网络,应用程序的各个层等。 换句话说,一切都是庞大,低级的,并且与应用程序的业务逻辑无关。
工人分为两种主要类型:
- 仅在场景内部使用的本地 。
- 全局可用于任何场景。
本地
工人直接放置在场景内部,并以她的
SceneNameWorker命名。 全局
工作程序位于“
工作程序”根目录中,并
根据其主题进行命名。 本地
工人还可以充当“全球装饰师”,并根据现场需求扩展逻辑。
如果将项目分为多个层(
表示 ,
业务逻辑 ,
持久性 ,
网络逻辑 ),则可以将
表示层和
业务逻辑之间的连接桥的角色
分配给
Workers 。 因此,我们将卸载
Interactor ,获得更可预测的行为并易于重用。
练习
我们将在使用网络的示例中考虑
工人的工作。 我们将有两个屏幕-第一个屏幕显示用户列表,第二个屏幕显示该用户的帖子列表。 所有数据将由
API获取 。 我们将把这个任务分为三个
工人 ,两个是本地的,一个是全局的,这将作为另外两个的入口。 我将在文章中隐藏这些方法的实现,无论谁想在实践中尝试一下,在文章末尾都将有一个指向完成的项目的链接。
该项目结构不是使用网络的参考,也没有以任何方式反映在Clean Swift中如何使用它。 所有这些仅是作为本地和全球工人角色的一个很好的例子而完成的。首先,创建一个全局
Worker -
NetworkWorker 。 将其放置在与
Scenes目录相同级别的
Workers目录中。 在下面的示例中,有一个
sendRequest(to:params:complete)方法,该方法对于local
Workers是通用的。 它执行例行任务-从参数形成链接,发送请求并将结果发送到
完成 。
struct NetworkWorker {
对于第一个场景,我们需要获取所有用户的
API列表。 为此,我们创建一个本地
HomeWorker ,它将配置用于加载用户的参数,并使用这些参数在
NetworkWorker中调用
sendRequest(以:params:completion) 。 现在,在场景的
Interactor中,我们需要调用
fetchUsers(completion :)并将接收到的数据发送给
Presenter进行处理。
当您单击具有用户名的表格单元格时,我们将进行转换并将所选用户转移到另一个场景。
struct HomeWorker {
在包含用户帖子的页面上,我们创建
PostsWorker ,但仅使用
fetchPosts(userId:completed :)方法。 在其中,我们传递您要下载其帖子的用户的ID。 在该方法中,我们形成参数并在
NetworkWorker中调用
sendRequest(至:params:完成) 。 并且以与之前相同的方式,我们在场景的
Interactor中调用
fetchPosts(userId:completed :)方法,将接收到的数据传递给
Presenter 。
struct PostsWorker {
现在,我们的整个实现已移至可以重用的单独文件,而无需在
Interactor中加载业务逻辑。
结论
尽管
Workers非常简单,并且不会透露任何有关体系结构的隐藏知识,但是在
Clean Swift中 ,它们的使用很重要。 在编写
Workers时 ,请不要忘记协议,结构模式和DI。 否则,您将很快形成一个混乱的
Workers ,其中所有可以取出的东西都被分割成碎片。
仅此而已。 感谢您阅读全文,以下是完整项目的链接。
系列文章
- Clean Swift体系结构概述
- Clean Swift体系结构中的路由器和数据传递
- Clean Swift架构的工作人员(您在这里)
- Clean Swift架构中的单元测试
- 一个简单的在线商店架构Clean Swift的示例
链接到项目撰写文章的帮助:
Bastien