【问题标题】:Where does regex go in an iOS app using the MVC design pattern?使用 MVC 设计模式的 iOS 应用程序中的正则表达式在哪里?
【发布时间】:2016-05-18 11:24:27
【问题描述】:

我正在快速编写一个 iOS 应用程序,就像我需要在多个屏幕中请求用户输入的每个应用程序一样。我想在设计我的应用程序时遵循良好的设计模式,我现在主要关注模型-视图-控制器设计模式。 我将专注于用户注册和登录屏幕来解释我的场景。 我有一个用户注册屏幕和一个登录页面,它们共享相似的输入字段,例如:电子邮件和密码

到目前为止,为了遵循 MVC 模式,我有以下课程:

模型类: User.swift

查看类: UserView.swift

控制器类: UserRegistrationViewController.swift、SignInViewController.swift

我现在在设计方面遇到的问题是,在每个视图控制器类中,我主要使用正则表达式来验证每个输入字段。正如您可能猜到的那样,这意味着我在两个视图控制器中都有大量重复的代码。例如,我在两个视图控制器中以完全相同的方式验证电子邮件和密码。 因此,我应该如何解决这个问题并仍然遵循 MVC? 我倾向于拥有一个 Validator 类,其中包含多个可以从每个视图控制器调用和重用的验证器函数,也可能是一个仅包含正则表达式的 Regex 类?还是应该是某种类型的属性文件

【问题讨论】:

  • 将功能提取到单独的一个或多个类中是移动它的合理方向。然后,您可以根据需要向控制器注入必要的验证器。

标签: ios swift validation design-patterns model-view-controller


【解决方案1】:

退后一步,想一想。你的 RegEx 函数是做什么的?验证和解析数据。那是模型(数据存储)功能吗?并不真地。看法?一点也不。控制?这似乎是最合适的。控制器在视图对象和您的数据模型之间进行调解,并提供应用控制逻辑。

现在,关于重复代码问题。你有多种选择来处理这个问题。

一种是为所有视图控制器创建一个公共子类,以提供您的 RegEx 支持。

另一种方法是为您的视图控制器类创建一个扩展并将验证代码放在那里。

第三种方法是创建您的验证器类,并让您的视图控制器具有验证器属性(“具有”关系。您的视图控制器有一个验证器来管理它的验证。)您甚至可以使用混合.假设您有一个 UIViewController 的子类,它具有 Validator 类的“管道”。

我倾向于第三种方法。将验证功能保留在视图控制器本身之外,使其模块化并且更有可能可重用。在您设计 Validator 类时(假设这是您采用的方法),请考虑您的 Validator 类也可能有用的其他用例,并尝试设计以适应广泛的用例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 2013-08-23
    • 2017-11-19
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多