您是否将其视为我的业务服务类打开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();
}
}
答案 0 :(得分:3)
你的qustion很容易受到意见......
我喜欢抽象代码并在任何地方解开。一如既往的问题是时间和要求。
对于在业务层中不需要大量单元测试的小型简单项目,您的耦合虽然不一定遵循最佳实践,但可能正是客户/最终用户所需要的,并且可能允许您以更及时的方式提供软件。
对于更大/更复杂的/ etc项目,最好抽象持久层。
对于每行代码,遵循最佳做法,最佳设计模式和最佳编码原则是根本不可行的你写的。我发现such books的作者经常提到这些模式可能是对需求的过剩,应该只在需要时用作工具。
希望有帮助吗?
答案 1 :(得分:0)
您是否将其视为我的业务服务类打开的紧密耦合 SqlConnection?
是。如果您有一些计算来完成这项工作,您可以在到达表示层之前在“业务”层中执行此操作。
我想建议的另一件事是在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()) {
}
}
}