面试题答案
一键面试设计思路
- 在视图模型中定义验证逻辑:为每个需要验证的属性(如用户名、密码)编写验证方法,在这些方法中实现具体的验证规则,如用户名长度限制、密码复杂度要求。
- 使用数据绑定将验证结果反馈到视图:通过数据绑定机制,将视图模型中的验证结果属性绑定到视图上对应的控件,使得视图能实时显示验证状态。
关键代码
- 定义视图模型类
Public Class UserRegistrationViewModel
Private _username As String
Private _password As String
Private _usernameError As String
Private _passwordError As String
Public Property Username() As String
Get
Return _username
End Get
Set(ByVal value As String)
_username = value
ValidateUsername()
End Set
End Property
Public Property Password() As String
Get
Return _password
End Get
Set(ByVal value As String)
_password = value
ValidatePassword()
End Set
End Property
Public Property UsernameError() As String
Get
Return _usernameError
End Get
Set(ByVal value As String)
_usernameError = value
End Set
End Property
Public Property PasswordError() As String
Get
Return _passwordError
End Get
Set(ByVal value As String)
_passwordError = value
End Set
End Property
Private Sub ValidateUsername()
If String.IsNullOrEmpty(Username) Then
UsernameError = "用户名不能为空"
ElseIf Username.Length < 6 Then
UsernameError = "用户名长度至少为6位"
Else
UsernameError = ""
End If
End Sub
Private Sub ValidatePassword()
Dim hasUpper As Boolean = False
Dim hasLower As Boolean = False
Dim hasDigit As Boolean = False
For Each c As Char In Password
If Char.IsUpper(c) Then
hasUpper = True
ElseIf Char.IsLower(c) Then
hasLower = True
ElseIf Char.IsDigit(c) Then
hasDigit = True
End If
Next
If String.IsNullOrEmpty(Password) Then
PasswordError = "密码不能为空"
ElseIf Password.Length < 8 Then
PasswordError = "密码长度至少为8位"
ElseIf Not hasUpper Or Not hasLower Or Not hasDigit Then
PasswordError = "密码必须包含大写字母、小写字母和数字"
Else
PasswordError = ""
End If
End Sub
End Class
- 在视图中绑定验证结果:假设使用Windows Forms,在设计视图中添加TextBox用于输入用户名和密码,添加Label用于显示错误信息,并在代码中进行数据绑定。
Public Class UserRegistrationForm
Private viewModel As New UserRegistrationViewModel
Public Sub New()
InitializeComponent()
usernameTextBox.DataBindings.Add("Text", viewModel, "Username", True, DataSourceUpdateMode.OnPropertyChanged)
passwordTextBox.DataBindings.Add("Text", viewModel, "Password", True, DataSourceUpdateMode.OnPropertyChanged)
usernameErrorLabel.DataBindings.Add("Text", viewModel, "UsernameError")
passwordErrorLabel.DataBindings.Add("Text", viewModel, "PasswordError")
End Sub
End Class
这样,当用户在视图中输入用户名和密码时,视图模型会实时进行验证,并将验证结果反馈到视图上对应的错误信息标签中。