どのくらいの情報隠蔽が必要ですか?レコードを削除する前にボイラープレートコードがあります。次のようになります。
public override void OrderProcessing_Delete(Dictionary<string, object> pkColumns)
{
var c = Connect();
using (var cmd = new NpgsqlCommand("SELECT COUNT(*) FROM orders WHERE order_id = :_order_id", c)
{ Parameters = { {"_order_id", pkColumns["order_id"]} } } )
{
var count = (long)cmd.ExecuteScalar();
// deletion's boilerplate code...
if (count == 0) throw new RecordNotFoundException();
else if (count > 1) throw new DatabaseStructureChangedException();
// ...boiler plate code
}
// deleting of table(s) goes here...
}
注:ボイラープレートコードは、「using(var cmd = new NpgsqlCommand(...)」を含むコード生成されます。
しかし、ボイラープレートコードをリファクタリングすることを真剣に考えています。もっと簡潔なコードが欲しかったのです。これは私がコードをリファクタリングすることを想像する方法です(拡張メソッドでより良くなりました(唯一の理由ではありません;))
using (var cmd = new NpgsqlCommand("SELECT COUNT(*) FROM orders WHERE order_id = :_order_id", c)
{ Parameters = { {"_order_id", pkColumns["order_id"]} } } )
{
cmd.VerifyDeletion(); // [EDIT: was ExecuteWithVerification before]
}
executecalarとボイラープレートコードをextensionメソッドの中に入れたかったのです。
上記の私のコードでは、コードのリファクタリング/情報の隠蔽が保証されていますか?リファクタリングされた操作が不透明すぎませんか?