我之前的经验是将数据库会话包装为 IDisposable,因此消费者总是会通过以下方式请求数据库会话:
using(var session = Database.CreateSession())
{
session.uploadFile();
session.deleteFile();
}
然后在包装会话的Dispose
方法中,它将刷新并关闭连接并处理任何必要的事情。通过这种方式,我(通常)确保连接已关闭并被处理;至少如果开发人员/我自己正确使用它。
至于你的第二个问题,你uploadFile
可以在成功时返回真/假或抛出异常。如果您希望它经常因正当原因而失败,那么 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);
}
但这只是一个样本;您可以随意使用该设计,因为它适合您。