";使用语句“;跨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;
    }

";使用语句“;跨N层

我看不出围绕实例化对象的returnusing语句有什么意义。我会删除这些内容,因为它只会妨碍可读性。

第一个例子也没有多大意义——因为调用DataBind需要在绑定的DataSet上操作,所以在using语句的外部执行绑定没有什么意义。我会把它放在using声明中。

对我来说唯一正确的用法是DataAdapter(最后一个例子)。

总的来说,似乎有人接受了对实现IDisposable的对象始终使用using语句的建议。

这并没有错,因为您已经继承了它并且它正在工作。我相信ExecuteDataSet可能是那个using语句唯一需要的地方。当然是根据提供的信息。然而,如果您去掉了连接信息和其他资源的片段,可能会有所不同。

例如,将表示层包裹在从返回的数据集中获取其值的using语句周围的目的是什么???

这究竟会产生什么影响?我认为它最终会影响其他程序员(正如你在这里发布的)的可读性和理解到底发生了什么。当你的眼睛筛选所有代码时,它会产生额外的噪音。

似乎处理数据集并没有带来任何好处,因为IDisposable只是没有实现它(请查看此处)。