如何实现流程协调器模式
通过查看此架构,我们看到协调器需要实例化,添加和删除其他协调器,实例化控制器,并知道如何在应用程序中导航。 没有一种方法可以实现这种逻辑。 如您所见,我的方法依赖于Andrey Panov的方法。
为了实例化协调器,我们使用CoordinatorFactory。
在BaseCoordinator中,我们具有添加和删除协调器的逻辑。 ChildCoordinators数组存储活动的协调器。 我们需要对它们有充分的参考,否则,它们将从内存中删除。
查看应用架构。 如果用户使用Profile VC,则Profile协调器位于Main协调器的childCoordinators变量中。 同时,主协调器位于应用程序协调器的childCoordinators变量中。 如果我们从Profile VC导航回A VC,则Main协调器将从childCoordinators数组中删除Profile协调器,我们将不再有强大的参考资料。
为了实例化视图控制器,我们使用ViewControllerFactory。 这个课很简单。 我们使用工厂模式来创建控制器。
对于路由,我们使用一个Router对象。 它具有对导航控制器的引用,因此路由器可以为我们显示,推动,关闭和弹出控制器。 它还支持自定义过渡。
现在,我们的协调器对象具有所需的所有条件,让我们尝试使用它。
实施协调员
在AppDelegate中,我们将初始化Application协调器并设置根视图控制器。 应用程序协调器将决定我们应该使用LaunchInstructor对象来进行认证还是主流。 因为这只是概念证明,所以我们不会实现它。 但是,其想法是LaunchInstructor应该检查auth令牌是否可用,如果可用,则注册完成。
启动应用程序时,我们可以登录或注册。 完成后,登录过程Application协调器将删除Auth并启动Main协调器。
到目前为止我们得到了什么?
- 控制器中的代码更少,因为导航逻辑已失效。
- 控制器不了解其他控制器。
可重用性
正如您在模式中看到的,我们在两个地方都有更改密码协调器。 如果要重用任何流,则需要创建一个选定协调器的新实例,一切准备就绪。
流量变化
产品经理来找你多少次,说一个小小的改变。 我们只需要添加演练和深层链接。 如果问我太多次。 幸运的是,现在这种过渡将不再那么痛苦。
如果要添加演练,则需要创建一个新的协调器并更改LaunchInstructor对象。 我们不需要更改应用程序委托或任何视图控制器中的任何内容。
向项目添加深层链接和推送通知可能非常痛苦。 但是,流量协调器也有解决方案。 启动协调器时,将使用startWithOption并创建新流程或重复使用现有流程。
测试中
现在,我们的控制器和视图模型更加整洁,可重用,并且没有太多依赖项。 因此对我们来说编写测试更容易。 在本文中,我们将不涉及测试,因为这可能是一个全新的话题。
结论
使用流程协调器,我们从视图控制器中删除了导航逻辑。 我们的代码更干净,可重复使用,更易于更改且更易于测试。 起初,它可能会发现有太多的代码要编写。 但是,您可以编写许多代码-BaseCoordinator,Router,LaunchInstructor,您可以在其他项目中重用,因此这是第一次,需要进行大量工作。 有人说这太复杂了,我不这么认为。 即使正确,也可以尝试一下。 它的好处实在不容错过。 这是代码示例。
资源资源
- 项目实例
- 使用协调器模式进行自定义过渡
- 如何使用MVVM和协调器实现委派模式
- 安德烈·潘诺夫(Andrey Panov)的协调员基本教程
- Krzysztof Zabtocki关于好的iOS应用程序体系结构的演讲
- Denis Walsh在iOS中的流程协调器
感谢您阅读🙂
如果本文对您有所帮助,并且您想了解有关类似主题的更多信息,请鼓掌,分享,关注或评论。