2009-04-23 75 views
1

我做了這個小地點類,以便我可以更好地處理地址信息,這些地址信息將發送到Google Maps API的請求中。我剩下的一件事就是驗證一下,確保地址有足夠的信息返回結果。最有效/優雅的地址驗證

對於應用程序,準確度應該與單個城市一樣寬鬆(這意味着只要提供了一個郵政編碼或城市/州,它就應該工作,因爲它會自動在該區域找到該地區的地理中心谷歌地圖)。

所以像:

  • 地址1,地址,城市,國家,郵編
  • 地址1,城市,國家,郵編
  • 地址1,城市,郵編
  • 地址1,ZIP
  • 城市,州

應該都工作,而像

  • 地址1,地址,國家
  • 國家
  • 地址1
  • 地址2
  • 地址1,地址

是行不通的,因爲它要麼返回潛在的大量結果或者將地理中心置於我想要的精確範圍之外。

注意我確信我可以列出數十種其他可以工作但不工作的組合,但是我希望我給出了足夠的例子來正確勾勒出「精度範圍」。

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語句檢查,如果事情存在,如果別的東西存在,如果別的東西不存在,並在整個鵝羣做這一點,但我覺得,如果這樣做成爲一大塊邏輯代碼。

在請求發送出去之前,是否有更高效/更優雅的方式確保我擁有有效的位置?

回答

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檢查中返回超過布爾值的內容。如果結果是有效的,一個簡單的真實值就足夠了,但是往往帶有你想知道的假返回值爲什麼它是無效的。我通常是這樣的:

Class ValidationResult 
    Public Property IsValid as Boolean 
    Public Property Errors as IEnumerable<String> 
End Class 
1

豈不既定標準僅僅歸結爲這樣:

Public Function isValid() As Boolean 
    Return _ 
     Not String.IsNullOrEmpty(_ZIP) _ 
     Or Not (String.IsNullOrEmpty(_City) Or String.IsNullOrEmpty(_State)) 
End Function