在业务服务中打开sql连接

本文关键字:sql 连接 业务 服务 | 更新日期: 2023-09-27 18:21:28

您认为我的业务服务类打开SqlConnection是紧密耦合的吗?

实际上,业务服务不应该知道具体的数据提供者?!

公共类UnitService:

 public void DeleteUnit(Unit unit)
            {
                using (SqlConnection con = new SqlConnection());
                using (TransactionScope trans = new TransactionScope())
                {
                    con.Open();
                    _unitDataProvider.Delete(unit,con);
                    _employeeDataProvider.UpdateEmployees(con);
                    trans.Complete();
                }             
            }

在业务服务中打开sql连接

你的问题很容易受到意见的影响。。。

我喜欢抽象代码并尽可能地解耦。和往常一样,问题是时间和要求。

对于一个不需要在业务层内进行广泛单元测试的小型简单项目,您的耦合虽然不一定遵循最佳实践,但可能正是客户/最终用户所需要的,并可能使您能够更及时地提供软件。

对于更大/更复杂的/etc/项目,最好抽象持久层。

对于您编写的每一行代码,遵循最佳实践最好的设计模式最优编码原则是不可行的。我发现这类书的作者经常提到这些模式可能超出了需求,应该在需要时简单地用作工具。

希望有帮助吗?

你认为我的业务服务类打开一个SqlConnection?

是的。如果您有一些计算要做的工作,您可以在到达表示层之前在业务层中完成。

我想建议的另一件事是,在SQLConnection class 的情况下,对IDisposable对象使用"Using"语句

我的意思是应该像下面这样。

using (System.Data.SqlClient.SqlConnection con = new SqlConnection("YourConnection string")) {
    con.Open();
    SqlCommand cmd = new SqlCommand();
    string expression = "Parameter value";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "Your Stored Procedure";
    cmd.Parameters.Add("Your Parameter Name", SqlDbType.VarChar).Value = expression;
    cmd.Connection = con;
    using (IDataReader dr = cmd.ExecuteReader()) {
        if (dr.Read()) {
        }
    }
}