Наиболее эффективная / элегантная проверка адреса - PullRequest
1 голос
/ 23 апреля 2009

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

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

Так что вроде:

  • Адрес1, Адрес2, Город, Штат, ZIP
  • Адрес1, Город, Штат, ZIP
  • Адрес1, Город, ZIP
  • Адрес1, ZIP
  • Город, штат

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

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

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

Ответы [ 2 ]

2 голосов
/ 23 апреля 2009

С точки зрения необходимых предметов, ваши правила действительно сводятся к:

Действительный адрес должен иметь либо почтовый индекс, либо город и штат.

Насколько я вижу, все, что удовлетворяет этому правилу, должно быть в порядке. Ваш код подтверждения может быть таким простым:

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 голос
/ 23 апреля 2009

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

Public Function isValid() As Boolean   
    Return _
        Not String.IsNullOrEmpty(_ZIP) _
        Or Not (String.IsNullOrEmpty(_City) Or String.IsNullOrEmpty(_State))
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...