在业务服务中打开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();
}
}
你的问题很容易受到意见的影响。。。
我喜欢抽象代码并尽可能地解耦。和往常一样,问题是时间和要求。
对于一个不需要在业务层内进行广泛单元测试的小型简单项目,您的耦合虽然不一定遵循最佳实践,但可能正是客户/最终用户所需要的,并可能使您能够更及时地提供软件。
对于更大/更复杂的/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()) {
}
}
}