MVC: контроллер или репозиторий с ModelState.Isvalid и DbUpdateConcurrencyException - PullRequest
0 голосов
/ 15 мая 2018

Должны ли ModelState.Isvalid и DbUpdateConcurrencyException находиться в контроллере или репозитории?Я создал основной проект MVC, провел строительные леса на столе.Однако скаффолдинг не создает интерфейсы или репозитории, поэтому для правильного проектирования программного обеспечения поместите код вставки / обновления в репозиторий.

Просто запросите, следует ли помещать исключения исключений ModelState.IsValid и DbUpdateConcurrencyException в репозиторий?Я получаю ошибки компиляции при размещении в репозитории.Я новичок в разработке программного обеспечения и MVC, все еще учусь.

Контроллер

if (ModelState.IsValid)
{
    try
    {
        _context.Update(ProductTransaction);
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException)
    {                    
         if (!ProductTransactionExists(ProductTransaction.Id))
         {
             return NotFound();
         }
         else
         {
             throw;
         }

Репозиторий

ProductTransaction.Id= ProductTransactionViewModel.Id;
ProductTransaction.Date= ProductTransactionViewModel.Date
ProductTransaction.CustomerName = ProductTransactionViewModel.CustomerName

1 Ответ

0 голосов
/ 15 мая 2018

Должно ли ModelState.Isvalid и DbUpdateConcurrencyException находиться в Контроллер или репозиторий? Я создал основной проект MVC, провел подмости на стол.

ModelState.IsValid принадлежат к уровню представления, он должен оставаться там. Если его значение равно true, вы должны вернуть то же представление, которым пользователь управлял до того, как он его отправил.

DbUpdateConcurrencyException принадлежит слою репозитория, и вы не должны распространять его на уровень представления. Вы ловите это исключение, когда оно происходит. Вы регистрируете соответствующие детали об этом. После этого вы выбрасываете пользовательское исключение, например, BusinessException, которое содержит только сообщение, которое пользователь может понять, например " Кто-то уже изменил содержимое. Обновите его, чтобы просмотреть ". Уровень представления знает только о BusinessException и о том, как прочитать его сообщение.

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