プロローグ コードとエピローグ コードを実装できる設計パターンを探しています。説明させてください:
私はほとんど同じことをする機能(それらの多く)を持っています:
これは前提コードですが、実際には C# 4.5 で記述されています。
public IDatabaseError GetUserByName(string Name)
{
try
{
//Initialize session to database
}
catch (Exception)
{
// return error with description for this step
}
try
{
// Try to create 'transaction' object
}
catch(Exception)
{
// return error with description about this step
}
try
{
// Execute call to database with session and transaction object
//
// Actually in all function only this section of the code is different
//
}
catch(Exception)
{
// Transaction object rollback
// Return error with description for this step
}
finally
{
// Close session to database
}
return everything-is-ok
}
したがって、ご覧のとおり、「プロローグ」(セッションの作成、トランザクション、その他のヘルパー関数) と「エピローグ」(セッションのクローズ、トランザクションのロールバック、メモリの消去など) はすべての関数で同じです。
いくつかの制限:
セッションおよびトランザクション オブジェクトの作成/破棄プロセスをctor ではなく関数に保持したい
カスタム コード (途中で実行されるコード) は、try/catch でラップし、さまざまな状況でさまざまなエラーを返す必要があります。
Func<>、Action<> の望ましい Task<> 関数の提案を受け付けています。
デザインパターンやコードリファクタリングのアイデアはありますか?