引入Clean Swift体系结构(VIP)

立即忘记MVC!

https://clean-swift.com/clean-swift-ios-architecture/

几年前,所有的iOS应用都很小,屏幕不到10个。 代码库很小,情节提要运行良好,并且易于维护您的项目。 从体系结构的角度来看,MVC做得很好。

今天怎么样

今天,我们面临着巨大的技术进步和疯狂的应用程序市场增长。 换句话说,应用程序变得越来越大和复杂。 我们正在处理包含20、30甚至40个屏幕的项目,因此无法使用MVC进行维护。

随着技术的发展,我们(开发人员)也应如此

最近,我真的对MVC感到厌倦,并开始寻找新的体系结构 。 经过短暂的研究,我注意到Clean Swift架构,并立即爱上了它! 这种架构正是我想要的。 🚀

关于Clean Swift架构

Clean Swift(又名VIP)是Bob叔叔的Clean Architecture,适用于iOS和Mac项目。 Clean Swift体系结构不是框架。 它是一组Xcode模板 ,可以为您生成Clean Architecture组件。 这意味着您可以自由修改模板以适合您的需求。

在MVC项目中,代码是围绕模型,视图和控制器组织的,并按模型,视图和控制器进行分组。 在Clean Swift中,您的项目结构是围绕场景构建的。 这是一个场景的示例。 换句话说,我们将为每个场景提供一组组件,这些组件将对我们的控制器“起作用”。 这些是组件:

  • 楷模
  • 路由器
  • 工人
  • 互动者
  • 主持人
通讯

组件之间的通信是通过协议完成的。 每个组件将包含用于在它们之间接收和传递数据的协议。 与交互器 工作者通信,然后与主持人演示的ViewController 交互器

我还设计了流程图,以便您可以直观地了解这些组件之间的关系。

清洁Swift(VIP)流程图

楷模

我们将存储与控制器相关的所有模型。 如流程图所示,Models类将与每个组件相关。 它将是struct类型,并且大多数将包含Request,Response和ViewModel结构。

对于此示例,假设您正在此场景中使用API​​调用。 您将需要以下结构:

  • 请求-需要发送到API请求的参数。
  • 响应 -拦截来自API的响应并存储适当的数据。
  • ViewModel-您需要显示给UI的所有内容都存储在这里。 例如,您的API返回带有10个参数的对象,但是您只需要显示其中的4个即可。

路由器

路由器负责在视图控制器之间进行转换和传递数据。 另外,您可以使用segues,这与VIPER架构不同,您不能这样做。

生成的路由器文件附带用于导航和传递数据的示例方法。 routeToSomewhere()方法是一个示例,向我们展示了如何通过使用segue或初始化目标视图控制器来过渡到另一个视图控制器。

声明了两个协议:

  1. 路由逻辑协议 -用于路由的所有方法都保持在此协议下。
  2. 数据传递协议 -包含需要传递到目标控制器的数据的协议。

工人

Worker组件将处理所有API / CoreData请求和响应。 Response结构(来自Models)将为Interactor准备好数据。 它将处理成功/错误响应,因此交互器将知道如何进行。

互动者

这是工作者与演示者之间的“调解人”。 这是Interactor的工作方式。 首先,它与ViewController通信,后者传递Worker所需的所有Request参数。 在继续进行工作之前,请先进行验证以检查是否正确发送了所有消息。 工作者返回响应,而交互者将该响应传递给演示者。

交互器还包含两种类型的协议,例如路由器:

  1. 业务逻辑协议 -声明此协议中的所有Interactor方法,因此可以在ViewController中使用它们。
  2. 数据存储协议 -在此处声明应保留其当前状态的所有属性。 该协议主要在路由器中用于在控制器之间传递数据。

主持人

现在我们有了交互器的响应,是时候将其格式化为ViewModel并将结果传递回ViewController了。 演示者将负责演示逻辑。 该组件决定如何将数据呈现给用户。

在此组件中仅声明了一个协议,用于存储表示逻辑方法。 在presentFetchResults()函数中,您可以看到我正在调用在视图控制器中声明的两个委托方法,并期望有适当的ViewModel可以将其呈现给UI。 (1)处理成功案例,(2)处理错误案例。

ViewController

我们已经完成了组件。 我希望您到目前为止已经了解了发生了什么。 但是,我们还没有完成。 这是最后一步,它是将组件付诸实践的步骤。 从上面的流程图中可以看到,ViewController将与Interactor进行通信,并从Presenter获得响应。 另外,当需要转换时,它将与路由器通信。

我们创建了两个委托方法,分别名为successFetchedItems()errorFetchingItems() 。 这些方法为我们提供了适当的ViewModel,因此我们可以分别处理这两种情况。

结论

我希望您喜欢本教程,并希望它有助于您了解新颖而令人兴奋的Clean Swift架构。 试图解释尽可能详细。 我知道,对于大多数人来说,MVC是最舒适的区域,但是一旦您脱离MVC并尝试一些新的东西,您会对结果感到惊讶。 与MVC相比,Clean Swift包含更多的编码和更少的文件,但是这使得维护和编写测试用例非常容易。 😎

如果您对此架构有任何疑问,请随时在下面向我发送评论,我们将很乐意为您提供帮助。 另外,不要忘了with或与同样在MVC上苦苦挣扎的朋友分享。 🤓

感谢您的关注! 👋

查看我最新的项目:
阅读有关Medium的更多故事:
订阅我的时事通讯:

From: https://hackernoon.com/introducing-clean-swift-architecture-vip-770a639ad7bf

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值