ios - 正则表达式在使用 MVC 设计模式的 iOS 应用程序中的什么位置?

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

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

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

模型类: User.swift

查看类:UserView.swift

Controller 类:UserRegistrationViewController.swift、SignInViewController.swift

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

最佳答案

退一步思考一下这个问题。你的正则表达式函数有什么作用?验证和解析数据。那是模型(数据存储)功能吗?并不真地。看法?一点也不。控制?这似乎是最合适的。 Controller 在 View 对象和数据模型之间进行中介,并且还提供应用程序控制逻辑。

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

其中之一是为所有提供 RegEx 支持的 View Controller 创建一个公共(public)子类。

另一种方法是为 View Controller 类创建扩展并将验证代码放在那里。

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

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

关于ios - 正则表达式在使用 MVC 设计模式的 iOS 应用程序中的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35275737/

相关文章:

validation - 如何在抽象类级别提供值验证?

ios - UIImage 覆盖颜色 : bad result

c# - 将 ASP.NET MVC 5 应用程序部署到 Win Server 2008

html - WKWebView 在新的 View Controller 中打开

javascript - 如何知道url是否可用?

asp.net - 用于禁用页面验证的 Javascript 函数

iphone - 根据纪元时间对 NSMutableArray 对象进行排序

javascript - 手机自动播放直播

javascript - 检查颜色是否接近

Swift 无法编辑 UITextView 并且无法添加文本