我创建了这个小型的位置类,以便我可以更好地处理我将要发送给Google Maps API的地址信息。我要做的一件事是进行一些验证,以确保地址有足够的信息来返回结果。
对于应用程序,准确度应该与单个城市一样松散(这意味着只要提供邮政编码或城市/州,它就应该有效,因为它会在Google中自动找到该区域的地理中心地图)。
所以像:
一切都有效,而像是
不会起作用,因为它会返回可能很多的结果,或者会使地理中心超出我想要的精确范围。
注意我相信我可以列出其他几十种有效且无效的组合,但我希望我提供足够的示例来正确概述“精确度范围”。
Public Class Location
Private _Address1 As String
Private _Address2 As String
Private _City As String
Private _State As String
Private _ZIP As String
Public Function isValid() As Boolean
'Insert validation code here'
End Function
End Class
我知道你可以使用一整套If
语句来检查是否存在某些内容以及是否存在其他内容,以及其他内容是否存在,等等,但我觉得这样会是一大块逻辑代码。
在我在请求中发送之前,是否有一种更有效/更优雅的方式来确保我有一个有效的位置?
答案 0 :(得分:2)
就所需物品而言,您的规则实际归结为:
有效地址必须包含邮政编码或同时包含城市和州。
据我所知,满足该规则的一切都应该没问题。您的验证代码可以简单如下:
Public Function isValid() As Boolean
If (String.IsNullOrEmpty(city) or String.IsNullOrEmpty(state)) And _
String.IsNullOrEmpty(zip) Then
Return False
Else
Return True
End If
End Function
显然,您可能还想检查字段中的值是否符合预期(正确的ZIP长度,有效状态等)。
顺便说一下,您可能要考虑从IsValid检查中返回多于布尔值的内容。如果结果有效,则一个简单的true就足够了,但通常使用错误的返回值,你想知道为什么它是无效的。我经常这样做:
Class ValidationResult
Public Property IsValid as Boolean
Public Property Errors as IEnumerable<String>
End Class
答案 1 :(得分:1)
所述标准不会归结为此:
Public Function isValid() As Boolean
Return _
Not String.IsNullOrEmpty(_ZIP) _
Or Not (String.IsNullOrEmpty(_City) Or String.IsNullOrEmpty(_State))
End Function