2012-04-17 2 views
2

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

Предполагая, что у меня есть модель с 5 свойствами .. 3 из них с dataannotations .. и у меня есть некоторые проверки, которые мне нужно проверить в базе данных перед вставкой.

Мне нужно что-то вроде «User.IsValidToInsert», чтобы проверить, действительно ли оно. Но я хочу также использовать ModelState.IsValid, потому что я не хочу проверять вручную все свойства с помощью dataannotations в 'IsValidToInsert'.

Как я могу это сделать? Должен ли я устанавливать проверки доступа к базе данных в «IsValidToInsert»? Должен ли я передавать параметры «User» и «ModelState» в класс репозитория?

ответ

0

Вы должны использовать View Model, специфичную для представления. Если у вас есть действие Create, чтобы создать Product, создайте модель просмотра ProductCreate. Вы можете поместить аннотации данных (или Fluent Validation и т. Д.), Которые специфичны для создания продукта. Это будет модель для вашего View/Controller. Если у вас есть страница «Редактировать», то создайте модель представления ProductEdit.

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

[HttpPost] 
public ActionResult Create(ProductCreate model) 
{ 
    // simple validations 
    if(!ModelState.IsValid) 
    { 
     return View(model); 
    } 

    // Domain Model/Entity 
    Product product = // create a product from your model here 

    // service layer 
    ProductService.Add(product); 

    return RedirectToAction("Index"); 
} 
+0

Таким образом, класс ProductService обращается к классу хранилища, и я никогда не буду использовать репозиторий напрямую? – MuriloKunze

+0

@murilokunze вы могли бы сделать это таким образом. Если вы этого не сделаете есть много бизнес-логики, которую вы могли бы просто поместить в свой репозиторий и просто ссылаться на них напрямую. Это действительно зависит от ситуации. – Dismissile

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