iOS 毒蛇 : where to put the form validation code?

标签 ios architecture viper-architecture

我看了很多关于干净的 iOS 架构 VIPER 的文章,我明白了主要目的:关注点分离。

我目前将它用于我的项目。我有模块,每个模块都按 View 、交互器、演示器、实体和路由器(带有 Storyboard)拆分。

我有一个模块:Address 和一个用于添加地址页面的子模块 Add。

因此,我的协议(protocol) View 由我的 UIViewController 实现。 View Controller 包含所有弱 IBOutlet 标签和文本字段(用于新地址表单)。

地址表单包含几个字段,例如:

  • 人名和姓氏
  • zip
  • 国家
  • 状态
  • 电话
  • 电子邮件
  • 等...

在我的例子中,presenter 只依赖于用户与执行 API 调用的交互器的交互。

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

我需要检查例如:

  • 国家的内容并告诉 View 如果该字段为空则为必填...
  • 电子邮件的格式并告诉 View 该字段无效...

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

哪个 VIPER 组件应该填补那个工作?

提前致谢!

最佳答案

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

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

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

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

关于iOS 毒蛇 : where to put the form validation code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37401017/

相关文章:

ios - 我正在尝试将框架/内核集成到 ios 中的简单 .h 和 .m 文件中?

IOS推送许多没有弹出的 View Controller

java - 如何更好地改变java项目中处理异常的方式?

ios - iOS中从中央服务器查询大量数据的建议

ios - UIActivityIndi​​cator 未显示的问题

iphone - iOS URL Scheme,完成后返回 Safari

architecture - ASP.NET - 加载具有重 OO 结构的网格数据

ios - VIPER 中 UITableView 数据源的 ViewModel,swift

android - 如何理解 VIPER 清洁架构?