私は次のようなコードを持っています。
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
クラススコープを持つ変数でステートメントを使用するのは悪い習慣ですか?私は何かを逃したことがありますか?