Проверки данных в / сеттер Getter или в другом месте?

голоса
9

Я интересно , если это хорошая идея , чтобы сделать проверки в добытчиками и сеттеров , или в других местах в коде.

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

Задан 05/08/2008 в 20:51
источник пользователем
На других языках...                            


8 ответов

голоса
13

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

Если у вас есть номер, чем может находиться в пределах от 1 до 100, я бы определенно положить что-то в инкубаторе, которая подтверждает, что и тогда, может быть сгенерировано исключение, перехваченные кодом. Причина проста: если вы не сделаете это в инкубаторе, вы должны помнить, что 1 до 100 ограничения каждый раз, когда вы установите его, что приводит к дублированному коду или, если вы забыли его, то это приводит к недействительному состоянию.

Что касается производительности, я с Кнутом здесь:

«Мы должны забыть о небольших эффективности, скажем, около 97% времени: преждевременная оптимизация есть корень всех зол».

Ответил 05/08/2008 d 20:59
источник пользователем

голоса
4

@Terrapin, повторно:

Если все у вас есть куча [простой общественный набор / получить] свойства ... они могли бы также быть полем

Свойства имеют другие преимущества по сравнению с полями. Они более явный контракт, они сериализации, они могут быть отлажены позже, они хорошее место для расширения через наследование. Clunkier синтаксис является случайной сложностью - .net 3.5, например, преодолевает это.

Распространенная (и недостатки) практика, чтобы начать с публичными полеми и превратить их в свойства позже, на «по мере необходимости» основы. Это нарушает ваш контракт с кем-либо, кто потребляет свой класс, так что лучше начать с свойствами.

Ответил 08/08/2008 d 01:07
источник пользователем

голоса
3

Это зависит.

Как правило, код должен обязательно быстро. Если значение может быть установлено несколько точек в коде и вы проверяете только после получения значения, то ошибка, как представляется, в коде, который делает обновление. Если сеттеры проверки ввода, вы знаете, что код пытается установить недопустимые значения.

Ответил 05/08/2008 d 20:59
источник пользователем

голоса
3

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

В конце концов, это то, что свойства предназначены. Если все у вас есть куча свойств, таких как ...

public string Name
{
    get
    {
        return _name;
    }
    set
    {
        _name = value;
    }
}

... они могли бы также быть полем

Ответил 05/08/2008 d 20:59
источник пользователем

голоса
1

Я стараюсь никогда не позволять мои объекты ввести недопустимое состояние, поэтому сеттеры определенно будет иметь подтверждение, а также любые методы, которые изменяют состояние. Таким образом, я никогда не придется беспокоиться о том, что объект, который я имею дело с недействителен. Если вы храните свои методы в качестве границ проверки, то вам никогда не придется беспокоиться о рамках проверки и IsValid () вызове метода посыпает повсюду.

Ответил 23/09/2008 d 20:44
источник пользователем

голоса
1

Я хотел бы реализовать IDataErrorInfo и поставить свою логику проверки в ошибках и этого [ColumnName] свойствах. Таким образом , если вы хотите программно проверить , есть ли ошибка , вы можете просто проверить любого из этих свойств в коде, или вы можете передать подтверждение от связывания данных в вебе - формах, Windows Forms или WPF.

Свойство связывания «ValidatesOnDataError» WPF делает это особенно легко.

Ответил 07/08/2008 d 23:24
источник пользователем

голоса
1

Вы могли бы хотеть проверить домен Driven Design , Эрик Эванс. DDD имеет это понятие Спецификация:

... явный предикат типа VALUE ОБЪЕКТЫ для специальных целей. A Спецификация предикат, который определяет, является ли объект делает или не удовлетворяет определенным критериям.

Я думаю, что неспособность быстро это одна вещь, другой где сохранить логику для проверки. Домен является правильным местом, чтобы сохранить логику, и я думаю, что характеристики объекта или метод проверки на ваших объектов домена будет хорошим местом.

Ответил 05/08/2008 d 21:03
источник пользователем

голоса
1

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

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

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

Не сохранять проверки до обновления базы данных !! Лучше терпеть неудачу быстро .

Ответил 05/08/2008 d 20:55
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more