代码之家  ›  专栏  ›  技术社区  ›  Omu

我应该为web使用静态DbUtil类吗,这有危险吗?

  •  3
  • Omu  · 技术社区  · 15 年前

    (我的申请在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 回复  |  直到 15 年前
        1
  •  2
  •   Darin Dimitrov    15 年前

    使用这个静态类是完全可以的,只要它像在您的案例中一样隐藏并包装在存储库后面。这使得使用存储库的控制器逻辑和数据访问之间的耦合较弱。你展示的静态方法看起来很完美 reentrant 这使得它线程安全。

        2
  •  1
  •   Jonas Høgh    15 年前

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

    然而,使方法静态化似乎并没有给您带来什么好处。一般来说,您应该更喜欢实例方法而不是静态方法,因为静态方法调用在测试期间无法模拟出来。