Является ли аксессор / мутатор свойства (получатель / установщик) правильным местом для обеспечения допустимых диапазонов? - PullRequest
2 голосов
/ 06 февраля 2012

В приложении, где установлен номер порта, я хочу ограничить значения, назначаемые номеру порта, значениями от 49152 до 65535 (включительно).

Я написал несколько методов тестирования, которые проверяют что-либо внеиз этого диапазона вызывает сбой теста.Они терпят неудачу (как и ожидалось, так как код еще не учитывает это).

Поэтому мой вопрос: как лучше всего поместить код, который принудительно устанавливает недопустимое значение в допустимое значение - здесь:

public int Port
{
    get
    {
        return port;
    }
    set
    {
        port = value;
    }
}

, например:

public int Port
{
  get
  {
      return port;
   }
   set
   {
       if ((value < 49152) || (value > 65535))
       {
          value = 55555;
       }
       port = value;
    }
}

... или где-то еще?

Ответы [ 3 ]

15 голосов
/ 06 февраля 2012

Как лучше всего поместить код, который принудительно устанавливает недопустимое значение в допустимое значение?

Лучшее место для этого - нигде . Преобразование недопустимого значения в случайное допустимое значение скрывает ошибку в вызывающей программе . Вызывающий может заранее знать, является ли значение, которое он пытается установить, допустимым или нет, поэтому вылетит, если он сделает это неправильно . Бросьте исключение, не игнорируйте ошибку и сделайте предположение, что они имели в виду.

12 голосов
/ 06 февраля 2012

Вы можете поместить логику проверки в свой установщик, но вам, вероятно, следует сообщить кому-нибудь, если проверка не удалась.

т.е.:

private static int minimumPortNumber = 49152;
private static int maximumPortNumber = 65535;

public int Port
{
  get
  {
      return port;
   }
   set
   {
       if ((value < minimumPortNumber) || (value > maximumPortNumber))
       {
           throw new ArgumentOutOfRangeException("port", string.Format("The port number is out of range. It must be between {0} and {1}", minimumPortNumber, maximumPortNumber));
       }
       port = value;
    }
}
2 голосов
/ 06 февраля 2012

Это одно из самых больших преимуществ использования методов обтекания полей и недопущения их непосредственного отображения. Так что я бы сказал совершенно определенно, да.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...