gpt4 book ai didi

c# - 在类级变量上使用 using 语句是不好的做法吗?

转载 作者:太空狗 更新时间:2023-10-29 17:33:19 25 4
gpt4 key购买 nike

我有类似下面的代码。

class MyController
{
[ThreadStatic] private DbInterface db;

public void ImportAllData()
{
using (db = new DbInterface())
{
var records = PullData();
PushData(records);
}
}

private DbRecord[] PullData()
{
return db.GetFromTableA();
}

private void PushData(DbRecord[] records)
{
db.InsertIntoTableB(records);
}
}

替代方案维护起来要麻烦得多。

class MyController
{
public void ImportAllData()
{
using (var db = new DbInterface())
{
var records = PullData(db);
PushData(records, db);
}
}

private DbRecord[] PullData(DbInterface db)
{
return db.GetFromTableA();
}

private void PushData(DbRecord[] records, DbInterface db)
{
db.InsertIntoTableB(records);
}
}

据我所知,我的第一个实现:

  • 是线程安全的(假设DbInterface是线程安全的),
  • 防止任何其他进程接触 db 变量,并且
  • 确保 db 始终被释放,即使在异常期间也是如此。

在具有类范围的变量上使用 using 语句是不好的做法吗?我错过了什么吗?

最佳答案

就我个人而言,我更喜欢你的第二种选择。

第一个设计的问题是您实际上在设计中添加了不必要的耦合。您的 PullDataPushData 方法不能单独使用 - 它们需要调用 ImportAllData 或一些其他方法将设置并正确清理首先调用的 db 变量。

第二个选项虽然稍微代码更多(虽然不多),但每个方法的意图都非常清楚。每个方法都知道它需要处理传递给它的外部 DbInterface 实例。这在未来被滥用的可能性很小或根本没有。

关于c# - 在类级变量上使用 using 语句是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14823710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com