iOS VIPER:在哪里放置表单验证码?

lud*_*riv 5 architecture ios viper-architecture

我阅读了许多关于干净的iOS架构VIPER的文章,我理解主要的主题:关注点的分离.

我目前用它来做我的项目.我有模块,每个模块由视图,交互者,演示者,实体和路由器(与故事板)分开.

我有一个模块:地址和子模块添加添加地址页面.

所以,我的UIViewController实现了我的协议View.视图控制器保存所有弱IBOutlet标签和文本字段(用于新地址表单).

地址表单包含以下几个字段:

  • 人的名字和姓氏
  • 邮编
  • 国家
  • 电话
  • 电子邮件
  • 等等...

在我的例子中,演示者只是将用户交互依赖于执行API调用的交互器.

但是,在执行API调用之前,我想预先验证表单以避免消耗无用的网络资源.

我需要检查一下例如:

  • 国家的内容,并告诉视图如果空的话需要字段...
  • 电子邮件的格式并告诉视图该字段无效...

我的问题是,我在哪里可以提交表单验证码?

应该填写哪个VIPER组件?

先感谢您!

Khe*_*dar 6

VIPER 的主要好处之一是关注点分离,因为信息被封装在适当的元素中。

交互器处理“业务逻辑”,其中包括大部分验证问题(部分验证可能由实体本身完成)。因此,视图会将其数据传递给展示器,展示器将其提交给交互器,后者将检查其业务有效性并要求实体通知它数据的一致性。

但是,使用库来加快开发速度可能会迫使您权衡封装以换取易用性。例如,SwiftValidator提供相当广泛的验证规则,但要求您将UITextFields传递给 Validator 组件。

因此,您可以选择依赖于交互器的更好的封装架构(可能由类似 的库增强Validators),还是更面向 MVVM 的工具,例如SwiftValidator.


Mik*_*ash 2

由于这与业务逻辑相关,因此我认为验证应该交给交互器。您甚至可以创建称为表单交互器的工作程序 - 如果您的验证太大,但交互器是执行此操作的地方。通过委托,您可以通知用户是否出现问题、到底出了什么问题、错误消息等。

我也会参考http://clean-swift.com/clean-swift-ios-architecture/

  • 小注:我认为 clean-swift.com 网站的作者还没有完全理解干净代码的基本思想。从我的角度来看,引入循环依赖(VC->I->P->VC)并不是一个好主意。视图控制器应该是愚蠢的,只知道它是演示者。所以我建议让它更像 (VC->P->I) - 将反向引用实现为委托。 (2认同)