Как обработать проверку уровня сервиса в MVC3 - PullRequest
0 голосов
/ 21 октября 2010

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

Упрощенным примером может быть использование DTO нашего клиента:

public class Customer
{
    [Required]
    public string FirstName { get; set; }

    [Required]
    public string LastName { get; set; }

    [Required] // Only required on some views
    public string Title { get; set; }
}

В нашем первом представлении все поля обязательны для заполнения, так как они показаны в DTO с использованием DataAnnotations.

В нашем втором представлении могут потребоваться FirstName и LastName, но заголовок является необязательным и может даже не отображаться в представлении.

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

Пока что метод выигрыша:

  • Каждое представление имеет выделенную модель представления, в которой существуют аннотации данных.
  • Затем модель представления отображает наши доменные объекты, используя что-то вроде Automapper.
  • Объекты домена затем передаются в хранилища и службы для выполнения действий над ними.

Это также означает:

  • Проверка не будет происходить на уровне сервиса, поскольку к тому времени, когда объекты попадут туда, они будут объектами домена, а не моделями представления.

Есть ли какой-нибудь лучший способ, которым мы должны обрабатывать это для корпоративного приложения? Мы еще не нашли решение.

1 Ответ

0 голосов
/ 22 октября 2010

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

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