2016-02-13 7 views
0

Я делаю веб-проект в ASP.NET MVC. Каждая служба вызова контроллера выполняет некоторые операции. Давайте посмотрим на примереЧто такое хорошая практика с DB Services C#

public interface IProjectService 
    { 
     bool ActivateProject(int projectId); 
     //others 
    } 

и реализован класс

public class ProjectService : IProjectService 
    { 
     private readonly IContextProvider _contextProvider; 

     public ProjectService(IContextProvider contextProvider) 
     { 
      _contextProvider = contextProvider; 
     } 

     public bool ActivateProject(int projectId) 
     { 
      using (var context = _contextProvider.GetContext()) 
      { 
       var project = context.Projects.Where(p => p.ProjectId == projectId).SingleOrDefault(); 
       project.Status = 1; 
       context.SaveChanges(); 
       return true; 
      } 
     } 
    //others 
    } 

В примере администратор хочет, чтобы активировать проект. У меня есть проверка в jQuery, поэтому администратор не может передавать ничего, кроме projectId.

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

+0

_ «У меня есть проверка в jQuery» _ - это не то, как вы защищаете веб-службу. – CodeCaster

+0

Что вы имеете в виду? Я имел в виду, что параметр метода всегда будет в порядке – miechooy

+0

Вы никогда не сможете доверять пользовательским вводам. Просто потому, что вы передаете значение из jQuery, это не означает, что кто-то обходит jquery и отправляет данные прямо вам. Проверяйте серверную сторону, в 100% случаев. – Phill

ответ

2

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

С учетом сказанного, существует граница, где исключения и возвращаемые значения подходят хорошо, и это всего лишь вопрос вкуса.

Исключения, как правило, обеспечивают большую гибкость, поскольку вы можете создавать различные типы исключений и обрабатывать их с помощью одной попытки/улова. Они также предоставляют гораздо больше информации. Логическое не говорит о том, что произошло.

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

Я лично брошу исключение на случай, если что-то пойдет не так, и пусть вызывающий его обработает.

+0

Возможно, вы пропустили часть вопроса «веб-сервис». Невозможно выбросить исключение из веб-службы (он превратится в ответ 500 с полезной нагрузкой JSON, описывающей исключение), и клиент действительно не сможет «обработать» эти исключения. – CodeCaster

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