我正在使用ADO.NET EF
,我需要在Save()
方法中实现某种自定义回滚。逻辑是这个
OpenFileDialog
,调用Save()
时的第一步是检查是否有所选图像以及是否要将所选图像复制到新位置。HasDuplicatingEntity(entity)
Save(entity)
Save(entity)
出现问题,我只需要删除之前复制的图片(如果有的话),那就是它。实际的实现是这样的:
try
{
SaveImage();
if(HasDuplicatingEntity(entity))
{
//Show message to the user
return false;
}
Save(entity);
}
catch
{
//Log the exception and show message
//Delete the image if there is such
}
出现的问题是,如果我尝试使用所选图像保存新实体,但HasDuplicatingEntity(entity)
返回true。然后使用当前逻辑,我只是向用户显示已经有一个具有相同唯一值的实体,然后只返回false,在选择图像然后复制的情况下,在我的文件系统中留下一个未使用的图像。
这引出了我的确切问题。我有一个方法,意味着在出现问题时删除图像,但它在catch
子句中调用。现在,当我看到另一个地方我可能需要删除图像时,我看到两个选项 - 只需从if
中调用该方法:
if(HasDuplicatingEntity(entity))
{
//Show message to the user
//Delete Image
return false;
}
这有点合乎逻辑但是除了方法调用之外我还有一些检查以确定是否实际存在复制的图像,因为图像不是必需的,这将导致几行重复代码。另一种选择是抛出异常并转到我已经处理过这个问题的catch
子句,但这意味着要改变管理这种情况的当前方式。这个确切的部分:
if(HasDuplicatingEntity(entity))
{
//Show message to the user
return false;
}
是继承的,我没有太多经验,所以我不想把好事变成坏事,所以我想知道哪个是处理这个问题的正确方法。