用于数据验证的Swift Viper Interdictor和Presenter规则

时间:2019-01-22 21:43:18

标签: ios swift viper viper-architecture

我确实有几个问题。什么是使用交互器的最佳方法:

比方说,我在拦截器中保存了一些数据,但是我想检查这些数据并显示下一个警报:

self.presenter?.showAlert(with: "All fields are required for adding exercise.".localized)
  

第一个问题是这是否违反了Viper?我需要检查数据吗   在演示者中传递给拦截器之前?

     

另一个问题:我是否需要使用函数showAlertFillIssue代替   传递文字?

即使是在违反presenter的情况下,我也会从interactor传递它。

2 个答案:

答案 0 :(得分:1)

Viper Architechture,您好,干预者包含业务逻辑。因此,在验证数据时。您可以从演示者调用方法以显示错误消息。 您可以定义一个枚举来处理错误,并将其传递给showAlert方法。

self.presenter?.showAlert(with: FormError.AllFieldRequired)

答案 1 :(得分:1)

https://TheSwiftDev.com/the-ultimate-viper-architecture-tutorial中所述,

  • 交互器区域仅用于从传感器、数据库或网络协议中获取实体,或用于将实体发送到数据库或网络协议。
  • 相反,演示者区域用于所有业务规则/逻辑的实施。偶尔会出现灰色阴影(如下所述),但一般规则是,在 Presenter 中检测到并非所有字段都正确填写会与数据库概念和 UI 概念分离。
  • 最好将 showAlert 视为完全在视图区域中的内容,因为根据操作系统的不同,它可能是一个操作系统上的警报,但另一个操作系统上的某些非警报 UI 构造。最好将 VIPER 视为:此操作在所有其他操作系统(而非 iOS)上会是什么样子,例如至少是 MacOS,还有 Android 和 UWP(或其他隔离在视图区域中的 UI 基础设施,例如 Qt)。最好将 showAlert 更笼统地改写为 emitError 或 balkBack,而不参考此操作系统上的实际 UI 构造。同样,最好将 showAlertFillIssue 和任何其他特定 UI 操作完全隔离在视图区域内,远离演示者(业务规则)和交互者(实体获取和存储)。