【问题标题】:What is good practice with DB Services C# [duplicate]数据库服务 C# 的良好做法是什么 [重复]
【发布时间】:2016-02-13 13:13:31
【问题描述】:

我正在用 ASP.NET MVC 制作 web 项目。每个控制器调用服务来做一些操作。让我们看一个例子

 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。

那么现在应该返回这个方法呢? 我应该让它无效吗? 假设数据库有错误,我应该抛出异常吗?这种操作的做法是什么?

【问题讨论】:

  • “我在 jQuery 中进行了验证” - 这不是您保护 Web 服务的方式。
  • 你是什么意思?我的意思是方法的参数总是可以的
  • 你永远不能相信用户的输入。仅仅因为您从 jQuery 传递值并不意味着有人绕过 jquery 并将数据直接发送给您。 100% 的时间验证服务器端。
  • 我当然不明白,所以我应该抛出异常还是什么?我不知道在这些情况下是什么练习

标签: c# asp.net


【解决方案1】:

作为一般规则,您不应使用异常来处理标准执行流程。异常用于不应该发生的事情实际发生的情况。

话虽如此,有一条边界线,异常和返回值非常适合,这只是一个品味问题。

异常通常会提供更大的灵活性,因为您可以抛出不同的异常类型并使用单个 try/catch 处理它们。他们还提供了更多信息。布尔值并不能说明发生了什么。

如果你返回一个布尔值,你应该在方法内部处理异常,至少在某处记录错误细节。

如果出现问题,我会亲自抛出异常并让调用者处理它。

【讨论】:

  • 您可能错过了问题的“网络服务”部分。没有办法从 Web 服务抛出异常(它会变成 500 响应,并带有描述异常的 JSON 有效负载)并且客户端确实无法“处理”这些异常。
猜你喜欢
  • 2019-10-22
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 2021-11-13
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多