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

时间:2016-05-23 21:41:42

标签: ios architecture viper-architecture

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

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

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

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

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

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

在我的情况下,演示者只是将用户交互依赖于执行API调用的交互器。

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

我需要检查一下:

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

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

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

提前谢谢!

4 个答案:

答案 0 :(得分:4)

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

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

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

因此,您可以选择依赖于Interactor的更好的封装体系结构(可能由像Validators这样的库加强),或者更像MV SwiftValidator的工具。

答案 1 :(得分:2)

由于这与业务逻辑有关,我想说验证应该转到交互方。您甚至可以创建将被称为表单交互器的工作者 - 如果您的验证太大,但是交互操作员就是这样做的地方。对于代理人,如果出现问题,出现了什么问题,错误信息等,您可以通知用户。

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

答案 2 :(得分:2)

您似乎应该考虑为此目的使用SOA architecture方法。

一般来说,使用VIPER模块的app的干净架构可分为以下几层:

  1. 汇编

    所有代码都与创建viper模块组件有关。

  2. 演示文稿

    你应该保留Animator,LayoutPerformer,Presenter,View,ViewController,Router等组件。

  3. 商业逻辑

    它专为Interactor和一系列服务而设计。理想情况下,每个服务都是无状态服务,它使用Core Components层中的类。例如,服务封装了一些网络客户端和请求,并生成了一些模型作为输出。

  4. 核心组件

    此图层的用途与您的问题相关联。这里有一个响应验证器,对象映射器,网络客户端等的地方。 所以答案是将它放入核心组件层。

  5. 模型图层

    它是应该保留所有实体的最深层。

  6. 好的,听起来不错,但在这种情况下如何构建项目?

    您可以使用例如下面的结构。

    
    
    --Modules
    ----Module
    ------Interactor
    ------Presenter
    ------Assembly
    ------Router
    ------View
    --Services
    --Core
    ----Validators
    ----Mappers
    --Models
    
    
    

答案 3 :(得分:0)

您可以在此帖子(https://github.com/CheesecakeLabs/Boilerplate_iOS_VIPER)中查看此样板(https://www.ckl.io/blog/best-practices-viper-architecture)以获取示例。

Presenter负责表单验证,但您不应将代码保留在Presenter上。相反,请为演示者调用FormValidationHelper()