どの程度の情報隠蔽が必要ですか?コードリファクタリングを実行する際に、どの程度の情報隠蔽が必要ですか?
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...
}
注:私はレコードを削除する前に、私は定型コードを持って、それはこのようになります定型コードが「使用(するvar CMD =新しいNpgsqlCommand(...)」
含め、コード生成でしかし、私は真剣にこれは私がコードをリファクタリングする思い描く方法です私はより多くのsuccintコードを望んでいた、ボイラープレートコードをリファクタリングすると思っています。(拡張メソッド(いない唯一の理由で、よりよい製;))
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]
}
私はrunscalarと定型コードを拡張メソッドの中に入れたいと思っていました。
上記の私のコードでは、コードリファクタリング/情報隠蔽が必要ですか?リファクタリングされた操作があまりにも不透明に見えますか?
VerifyDeletionは(少なくとも私のコードの場合は)機能がよく定義されているので、これを拡張メソッドに入れてください。 – Hao