我应该将 Core Location 方法放在 VIPER/MVP iOS 项目的什么位置?

Where should I put Core Location methods in a VIPER/MVP iOS project?

我搜索了很多,我知道视图控制器实际上是 Viper 或 MVP 架构中的 "View" 并且 Presenter 包含逻辑...但是因为 Presenter 应该易于测试,是吗?将 Core Location 的东西(比如 LocationManager 和位置更新)放入 Presenter 好吗?或者我应该放入视图控制器并通知演示者?

我会通过创建一个 LocationService 对象来解决这个问题,该对象包装了所有 Core Location 方法,并公开了它们的输出,可能会将位置更新的结果公开为流(如果您使用的是 Rx ) 或回调。

我会使用 Dependency Injection (perhaps using Swinject) 将其注入 MVP 中的展示层或 VIPER 中的交互层(因为位置信息可能会影响应用程序的核心业务逻辑)。为了测试该应用程序,请创建此服务的 'mock' 版本以提供测试数据,并将其注入测试中的 presenter/interactor。