1

您认为我的业务服务类打开 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();
                }             
            }
4

2 回答 2

3

您的问题非常受意见...

我喜欢在任何可能的地方抽象代码和解耦。一如既往,问题是时间和要求。

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

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

为您编写的每一行代码都遵循最佳实践最佳设计模式最佳编码原则根本不可行。我发现此类书籍的作者经常提到模式可能超出需求,并且应该在需要时简单地用作工具。

希望有帮助吗?

于 2012-01-26T21:18:53.640 回答
0

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

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

我想建议的另一件事是对 IDisposable 对象使用“使用”语句,以防万一SQLConnection class

我的意思是它应该如下所示。

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()) {
        }
    }
}
于 2012-01-26T21:13:22.970 回答