我应该为网络使用静态DbUtil类,这是危险的吗?

时间:2010-10-04 12:55:14

标签: asp.net asp.net-mvc ado.net data-access-layer

可以在网上使用这样的东西: (我的申请是在asp.net mvc上)

public static class DbUtil
{  
      public static int Insert(object o, string cs)
        {
            using (var conn = new SqlConnection(cs))
            using (var cmd = conn.CreateCommand())
            {
              ...

                conn.Open();
                return Convert.ToInt32(cmd.ExecuteScalar());
            }
        }
}

用法:

public class Repository<T> : IRepository<T>
{
       public virtual int Insert(T o)
       {
            return DbUtil.Insert(o, Cs);
       }
}

在服务或控制器中构造函数注入之后

    public MyController(
        IRepository<Organization> organizationRepository)
    {
        this.organizationRepository = organizationRepository;
    }

2 个答案:

答案 0 :(得分:2)

使用这个静态类是绝对可以的,只要它隐藏在存储库后面,就像你的情况一样。这允许使用存储库的控制器逻辑与数据访问之间的耦合较弱。你所展示的静态方法看起来很完美reentrant,这使得线程安全。

答案 1 :(得分:1)

如上所述,您的静态方法没有并发问题,因为它不对任何共享数据进行操作,并且每次调用都会实例化其自己的本地连接和命令对象。

然而,从使该方法保持静态,你似乎并没有获得太多。通常,您应该优先使用静态方法的实例方法,因为在测试期间无法模拟静态方法调用。