私の以前の経験では、データベース セッションが IDisposable としてラップされていたため、消費者は常に using を介してデータベース セッションを要求していました。
using(var session = Database.CreateSession())
{
session.uploadFile();
session.deleteFile();
}
次に、ラップされたセッションのDispose
メソッドで、接続をフラッシュして閉じ、必要なものをすべて破棄します。このようにして、(通常は)接続が閉じられて破棄されることが保証されました。少なくとも開発者/私自身が適切に使用した場合。
2 番目の質問については、uploadFile
成功時に true/false を返すか、例外をスローできます。正当な理由で頻繁に失敗することが予想される場合は、おそらく true/false の方が適切です。UploadResults
また、ブール値の合格/不合格プロパティと、失敗した理由/例外を持つオブジェクトを返すようにすることもできます。
public class MySession
{
public UploadResults UploadFile()
{
try
{
//try upload
return UploadResults.Succeeded();
}
catch (Exception ex)
{
return UploadResults.Failed(ex);
}
}
}
public class UploadResults
{
public bool Success { get; private set; }
public Exception FailureReason { get; private set; }
private UploadResults(bool success, Exception failureReason)
{
this.Success = success;
this.FailureReason = failureReason;
}
internal static UploadResults Succeeded()
{
return new UploadResults(true, null);
}
internal static UploadResults Failed(Exception failureReason)
{
return new UploadResults(false, failureReason);
}
}
次に、コードは次のようになります。
using(var session = Database.CreateSession())
{
var results = session.uploadFile();
if (results.Success)
session.deleteFile();
else
ReportError(results.FailureReason);
}
しかし、これは 1 つのサンプルにすぎません。自分に合ったデザインで遊ぶことができます。