Я работаю над проектом, который требует разных наборов валидации для одной и той же модели, и мы пытаемся найти лучшее решение для этого.
Упрощенным примером может быть использование 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.
- Объекты домена затем передаются в хранилища и службы для выполнения действий над ними.
Это также означает:
- Проверка не будет происходить на уровне сервиса, поскольку к тому времени, когда объекты попадут туда, они будут объектами домена, а не моделями представления.
Есть ли какой-нибудь лучший способ, которым мы должны обрабатывать это для корпоративного приложения? Мы еще не нашли решение.