#c# #asp.net-mvc
#c# #asp.net-mvc
Вопрос:
Приложение .NET MVC, сначала использующее идентификатор и код EF. В нем у меня есть CustomValidations.cs, где я написал некоторые пользовательские атрибуты проверки: некоторые из них содержат как серверную, так и клиентскую проверку. Обе модели и viewmodels используют эти атрибуты проверки. (проверка на стороне клиента выполняется путем реализации IClientValidatable и добавления его метода GetClientValidationRules).
Например (это находится в папке CustomAttributes / CustomValidations.cs в проекте MVC):
namespace MyApp.CustomAttributes {
public class RequiredIfSomething : ValidationAttribute, IClientValidatable {
public RequiredIfSomething() { }
protected override ValidationResult IsValid(object value, ValidationContext validationContext) {
//server-side validation code here
return ValidationResult.Success;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) {
// client-side validation code here.
yield return rule;
}
}
}
Сейчас я пытаюсь разделить решение в разных проектах. Я начал с создания проекта библиотеки классов (MyApp.DAL) для уровня DAL и переместил все мои объекты entity Framework, dbcontext (ApplicationDbContext, который является IdentityDbContext) и папку миграции из проекта MVC в новый проект, добавил ссылки в проект MVC и изменил пространства имен и т.д.
Итак, теперь проект MVC использует проект DAL.
Кажется, все это работает, но теперь у меня проблема с моими пользовательскими валидаторами: я предполагаю, что эти проверки (или, по крайней мере, некоторые из них) должны находиться в проекте DAL, поскольку я украшаю ими свойства моделей. Но тогда у меня была бы в проекте DAL не только проверка на стороне сервера, но и проверка на стороне клиента, которая, по моему мнению, должна быть специфичной для mvc (и, следовательно, не должна находиться в проекте DAL)…
Каков был бы правильный способ сделать это?
Ответ №1:
Как правило, это решается с помощью viewmodels на веб-уровне и ваших базовых моделей EF на уровне доступа к данным. Ваши пользовательские средства проверки для проверки ввода данных клиентом и т. Д. Будут Использоваться в ваших моделях просмотра и находиться на веб-уровне. Ваши пользовательские средства проверки для ваших моделей (обычно для защиты целостности данных, вставляемых в БД) будут использоваться в ваших моделях EF и находиться на уровне доступа к данным. Существует несколько библиотек сопоставления, которые помогают переводить между необработанными моделями EF и viewmodels (auto mapper, вероятно, является наиболее распространенным), если вы не привыкли это делать.