我最近继承了一个带有4层设置的.Net Web App。按照这些情况的正常情况,我没有文档,也没有与之前的开发人员联系。该应用程序的前一个团队的成员有着截然不同的习惯,我正在尝试对这些代码进行重构/标准化。我遇到了一些我以前从未见过的东西(我无法找到任何地方或任何人实现这个作为练习),其中一个/多个开发人员将所有DataSet包装在using语句中,因为它通过层返回。我一见到它就想把它扔掉。在许多这些实现中,可读性被拍摄。然后我开始质疑自己,因为我无法想象有人这样做是因为。我理解在使用对象时处理对象的愿望,但这似乎有人过火了。有没有人知道实施这个的可靠理由?
这是一个关于正在做什么的TLDR示例。
演示:
using (DataSet ds = objCustomerFBO.FetchCustomerInfo(base.KeyID))
{
grdCustomerInfo.DataSource = ds;
}
grdCustomerInfo.DataBind();
对象:
public DataSet FetchCustomerInfo(int keyID)
{
using (DataSet ds = objCustomerEBO.FetchCustomerInfo(keyID);
{
return ds;
}
}
商务:
public DataSet FetchCustomerInfo(int keyID)
{
SqlParameter arrSqlParam = new SqlParameter[1];
arrSqlParam[0] = new SqlParameter("@CustomerID", SqlDbType.Int);
arrSqlParam[0].Value = keyID;
using (DataSet ds = CommonEBO.ExecuteDataSet("FetchCustomerInfo", arrSqlParam);
{
return ds;
}
}
数据(通过重载过滤后):
public static DataSet ExecuteDataSet(string strCommandText, SqlParameter[] SqlParams, CommandType commandtype, string strConnectionString)
{
DataSet ds = new DataSet();
try
{
using (SqlDataAdapter oAdpt = new SqlDataAdapter(CMSOnlineDH.CreateCommand(strCommandText, SqlParams, commandtype, strConnectionString)))
{
oAdpt.SelectCommand.Connection.Open();
oAdpt.Fill(ds);
}
}
catch { throw; }
return ds;
}
答案 0 :(得分:2)
我没有在using
语句中看到包围实例化对象的return
的点。这些我会删除,因为它只会妨碍可读性。
第一个例子也没有多大意义 - 因为调用DataBind
需要在绑定的DataSet
上操作,在<{1>之外执行绑定 语句没什么意义。我会把它放在using
声明中。
对我来说唯一正确的用法是using
(最后一个例子)。
总之,看起来有人接受了建议,总是对实现DataAdapter
的对象使用using
语句。
答案 1 :(得分:2)
没有错,因为你继承了它并且它的工作。
我相信ExecuteDataSet
可能是使用声明所需的唯一地方。
根据当然提供的信息。但是,如果你已经删除了可能是另一个故事的连接信息和其他资源的片段。
例如,表示层的目的是围绕一个using
语句,它从返回的数据集中获取其值???
这究竟是什么影响?我认为最终它会影响其他程序员(正如你在这里发布的)关于可读性和理解究竟是什么。当你的眼睛筛选所有代码时,它会产生额外的噪音。
答案 2 :(得分:1)
看起来处理数据集并没有带来任何好处,因为IDisposable它没有实现(have a look here)。