";使用语句“;跨N层
本文关键字:quot 语句 | 更新日期: 2023-09-27 18:21:58
我最近继承了一个具有4层设置的.Net Web应用程序。与这些情况下的正常情况一样,我没有文档,也没有与之前的开发人员联系。该应用程序的前一个团队的成员有着截然不同的习惯,我正在尝试在重构/标准化代码时对这些习惯进行分类。我遇到了以前从未见过的东西(我找不到任何地方或任何人将其作为实践来实现),其中一个/多个开发人员在通过层返回时将所有数据集封装在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;
}
我看不出围绕实例化对象的return
的using
语句有什么意义。我会删除这些内容,因为它只会妨碍可读性。
第一个例子也没有多大意义——因为调用DataBind
需要在绑定的DataSet
上操作,所以在using
语句的外部执行绑定没有什么意义。我会把它放在using
声明中。
对我来说唯一正确的用法是DataAdapter
(最后一个例子)。
总的来说,似乎有人接受了对实现IDisposable
的对象始终使用using
语句的建议。
这并没有错,因为您已经继承了它并且它正在工作。我相信ExecuteDataSet
可能是那个using语句唯一需要的地方。当然是根据提供的信息。然而,如果您去掉了连接信息和其他资源的片段,可能会有所不同。
例如,将表示层包裹在从返回的数据集中获取其值的using
语句周围的目的是什么???
这究竟会产生什么影响?我认为它最终会影响其他程序员(正如你在这里发布的)的可读性和理解到底发生了什么。当你的眼睛筛选所有代码时,它会产生额外的噪音。
似乎处理数据集并没有带来任何好处,因为IDisposable只是没有实现它(请查看此处)。