Как я проверяю поля классов? - PullRequest
2 голосов
/ 09 марта 2010

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

    internal class Customer
{

    private string _CustomerId;
    internal string CustomerId
    {
        get
        {
            return (_CustomerId==null?string.Empty:(_CustomerId.Length>20?_CustomerId.Substring(0,20):_CustomerId));
        }
        set
        {
            _CustomerId = value;
        }
    }}

С уважением, Свен

Ответы [ 2 ]

3 голосов
/ 09 марта 2010

Более чистым методом было бы аннотировать ваши свойства с помощью атрибутов проверки и использовать библиотеку для проверки сущностей.

Примеры включают в себя:

Тогда, в зависимости от выбранной библиотеки, ваш код будет выглядеть так:

public class Customer
{
    [StringLengthValidator(20)]
    public virtual string CustomerId { get; set;}
}
2 голосов
/ 09 марта 2010

Ваш способ проверки ввода очень хрупок. Вы исключаете любые возможные входные данные (для CustomerId в данном случае) и очищаете их, когда они запрашиваются. Это может работать в этом базовом сценарии, но во многих случаях вы не можете очистить входные данные. Вы в основном исправляете ошибки пользователя и делаете предположения о том, что он намеревался. Как вы будете делать это с почтовым адресом? Например, должен ли почтовый адрес «stevenhotmail.com» быть преобразован в «steven@hotmail.com» или «stevenhot@mail.com». Помимо этого, существует также возможность ошибки программирования. Хотели бы вы, чтобы ваша программа пыталась исправить ваши собственные ошибки программирования? Это даст вам головную боль. Или что вы будете делать, когда нужно сравнить два свойства одного и того же объекта?

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

Есть несколько подходов к этому. Например, вы можете реализовать метод IsValid() для каждой сущности или использовать платформу проверки.

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