Я пытаюсь реализовать шаблон Execute Around , описанный в шаблонах лучших практик Кент Бека Smalltalk. Пример на Java можно найти здесь .
По сути, я неоднократно открываю и закрываю 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();
}
У меня такой вопрос: хорошая ли передача лямбды делегату от действия? Я не настолько знаком с делегатами, действиями и лямбдами (кроме как использовать их в запросах linq). Есть ли другие лучшие альтернативы?