1

Я пытаюсь обернуть голову проверкой ввода пользователя и проверки бизнес-объекта. Предположим, что я работаю с объектом Customer. Он имеет следующие свойства: CustomerId, FirstName и LastName. Требуется имя FirstName и LastName, длина которых не может превышать 50 символов.Проверка правильности ввода данных и проверка бизнес-объекта путаница

Я использую ASP.NET MVC 3. Я также экспериментирую с Fluent Validation (но не обязательно должен быть эта система проверки).

Когда я нахожусь на Create зрения клиента, я прохожу вид на CustomerViewModel:

[Validator(typeof(CustomerViewModelValidator))] 
public class CustomerViewModel 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

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

У меня может быть другое приложение (кроме описанного выше веб-приложения), которое будет использовать мой сервисный уровень. Так что это будет означать, что мне придется проверять объект Customer, если он создан. Возникают следующие вопросы:

  • Нужно ли проверять объект Customer в CustomerService, чтобы проверить FirstName и LastName?
  • Было бы лучше создать новый класс валидатора для проверки класса Customer? Или я должен поделиться им?
  • Нужно ли также проверять CustomerId? Я имею в виду, что он должен быть больше нуля, но как я могу использовать нового клиента, где Id равен 0?

Если кто-то может поделиться некоторыми проницательностью/статьями в этом, это будет оценено.

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

ответ

0

Нужно ли проверять объект Customer в CustomerService, чтобы проверить FirstName и LastName?

Могут быть разные мнения по этому вопросу, а мое заключается в том, что если вы создаете многоразовую услугу, было бы правильнее проверить объект Customer на уровне обслуживания.

Было бы лучше создать новый класс валидатора для проверки класса Customer? Или я должен поделиться им?

Необходимо создать новый валидатор. Помните, что CustomerViewModel и Customer - это два разных класса. Модель представления специфична для данного представления и может содержать подмножество или надмножество свойств модельного класса. Проверка на уровне сервиса должна проверять только бизнес-правила. Если вы используете SQL-сервер, эта проверка может даже выполняться на уровне базы данных (путем установки длины столбцов), и исключение будет выбрано, если некоторые из этих бизнес-правил нарушались.

Смежные вопросы