我正在尝试实施Kent Beck的Smalltalk最佳实践模式中所述的执行各地模式。可以在Java中找到一个示例here。
基本上,我在执行各种操作时反复打开和关闭pdf文档,例如
public void Parse()
{
// Open the document
PdfLoadedDocument loadedDocument = new PdfLoadedDocument("plan.pdf");
List<string> annotations = Build(loadedDocument);
// Close the document
loadedDocument.Save();
loadedDocument.Close();
}
我想将打开和关闭文档的位置集中,因为我有数十种类似的方法。所有这些方法都可以打开文档,执行操作并关闭文档,很容易忘记关闭文档。
这是我尝试过的:
public void BuildAnnotations()
{
List<string> annotations = null;
ExecuteAction("plan.pdf", (PdfLoadedDocument loadedDocument) =>
{
annotations = Build(loadedDocument);
});
}
private void ExecuteAction(string path, Action<PdfLoadedDocument> perform)
{
PdfLoadedDocument loadedDocument = new PdfLoadedDocument(path);
try
{
perform(loadedDocument);
}
catch(Exception e)
{
Console.WriteLine($"An error occured. {e}");
}
loadedDocument.Save();
loadedDocument.Close();
}
我的问题是,将lambda传递给Action代表是一个好主意吗?我对委托,操作和lambda不太熟悉(除了在linq查询中使用它们)。还有其他更好的选择吗?
答案 0 :(得分:2)
您是否考虑过实现IDisposable
接口,所以以后可以使用using
关键字,例如:
using (PdfLoadedDocument loadedDocument = new PdfLoadedDocument(path))
{
List<string> annotations = Build(loadedDocument);
}
public class PdfLoadedDocument : IDisposable
{
public void Close()
{
}
public void Save()
{
}
public void Dispose()
{
Save();
Close();
}
}