Наиболее эффективная и элегантная проверка адресов

Я создал этот небольшой класс местоположения, чтобы лучше обрабатывать адресную информацию, которую я собираюсь отправлять в запросах к Google Maps API. Мне осталось сделать некоторую проверку, чтобы убедиться, что в адресе достаточно информации для возврата результата.

Для приложения уровень точности должен быть таким же неопределенным, как для одного города (это означает, что оно должно работать, пока указан почтовый индекс или город / штат, поскольку он автоматически найдет географический центр этой области на Картах Google).

Такие вещи, как:

  • Адрес1, Адрес2, Город, Штат, Почтовый индекс
  • Адрес1, Город, Штат, Почтовый индекс
  • Адрес1, Город, Почтовый индекс
  • Адрес1, почтовый индекс
  • Город, штат

Должно все заработать, пока что-то вроде

  • Адрес1, Адрес2, Состояние
  • Состояние
  • Город
  • Адрес 1
  • Адрес 2
  • Адрес1, Адрес2

Не сработает, потому что либо вернет потенциально многочисленные результаты, либо географический центр выйдет за пределы желаемой мной точности.

ПРИМЕЧАНИЕ. Я уверен, что могу перечислить десятки других комбинаций, которые работают и не работают, но надеюсь, что я привел достаточно примеров, чтобы правильно обрисовать здесь «область точности».

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 операторов, проверяющих, существует ли что-то и существует ли что-то еще, и если чего-то еще не существует, снова и снова, но я чувствую, что это был бы огромный кусок логического кода .

Есть ли более эффективный / элегантный способ убедиться, что у меня есть действительное местоположение, прежде чем я отправлю его в запросе?


person TheTXI    schedule 23.04.2009    source источник


Ответы (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
person Ryan Brunner    schedule 23.04.2009

Разве заявленные критерии не сводятся к следующему:

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