3

在 iOS VIPER 项目中,需要在每个模块中调用远程服务(例如刷新令牌 + 检查用户登录)。实现这一需求的最佳实践是什么?

  • 每个模块可以有多个交互器吗?

  • 或者我们是否应该在每个模块(交互器)中实现相同的业务逻辑?

  • 我们是否应该将交互器与模块(如网络)分开并根据需要在模块之间共享?

在我研究的大多数示例中,他们通常谈论不同的业务逻辑,而不是同一个!

4

2 回答 2

1

应用程序的每个内聚部分都应该有一个 VIPER 模块,这对于具有强大的内部内聚力是有意义的,而 VIPER 模块之间的粘合力相对较小(例如,彼此之间的服务接口)。几十年来,电信软件架构一直有这样的独立模块/子系统,每个模块/子系统都是它自己的 VIPER 模块(如果没有在内部分解成几个 VIPER 模块,但让我们跳过它);它被称为 FCAPS:https ://en.wikipedia.org/wiki/FCAPS ,它显示了一个大型软件系统的截然不同的用途,分为以下不同的模块:

  • 通过依赖有向无环图进行故障隔离,以驱动推断哪些异常症状表明出了什么问题
  • 通过各种可调参数正确配置系统的配置设置(拒绝禁止的配置设置)
  • 对系统操作如何开始、确保连续性和淘汰可计费事件以产生收入的会计计费
  • 系统运行如何预测接近系统胁迫或单个组件故障的趋势(例如,资源池的成员)的性能
  • 如何禁止未经授权或未经身份验证或无资金使用系统的安全性

这不是划分最宏观 VIPER 模块的唯一可以想象的方式,但它是对模块/子系统的深思熟虑的划分,最终几乎每个大型软件系统/应用程序都需要作为管理职责与任何系统/应用程序的主要目的是,它当然是它自己的 1 个或多个 VIPER 模块,一个用于系统/应用程序的每个主要广泛技术成就主题 - 无论最宏观的用例集合是什么(例如,将新内容创建为 1 个 VIPER 模块,将旧内容历史的可检索存档保留为另一个 VIPER 模块,从存档中删除 cruft 作为另一个 VIPER 模块,等等,其中每一个都可能有很多这些广泛的保护伞下的用例)。

于 2021-04-02T03:42:40.783 回答
1

每个人都有自己的毒蛇!!这是一种常见的架构。每个团队使用不同的方法来使用它。即使对于一个团队,他们也可能因项目而异。我认为您需要在便利性和架构之间找到折衷方案。每个开发人员和每个项目在构建依赖项方面都有自己的最佳实践。ps 按照架构,所有与网络/磁盘的通信都来自interactor。它可以以不同的方式组织,这与 VIPER 无关。网络服务的创建或交互器的重用等取决于您的......愿望)

于 2019-04-30T05:54:12.543 回答