Tôi có nhiều phương pháp yêu cầu một số ghi nhật ký có cùng mẫu. Một số phương pháp cần trả lại một số giá trị, một số thì không. Tôi đã tạo một phương thức với tham số Action để tránh sao chép tất cả logic. Nó trông giống như thế này:Kết hợp hành động và Func trong một tham số
private void Execute(Action action)
{
Logger.Start();
try
{
action();
}
catch(Exception exception)
{
Logger.WriteException();
throw;
}
finally
{
Logger.Finish();
}
}
Bây giờ tôi có một số cuộc gọi mà thích rằng
public void DoSomething(string parameter)
{
Execute(() => GetProvider(parameter).DoSomething());
}
Nhưng tôi cần một số chức năng mà trở về giá trị. Cách tốt nhất để làm điều đó là gì? Tôi đã tìm thấy hai bây giờ:
1) Tạo một bản sao của phương pháp Execute với Func
private T Execute<T>(Func<T> action)
{
Logger.Start();
try
{
return action();
}
catch(Exception exception)
{
Logger.WriteException();
throw;
}
finally
{
Logger.Finish();
}
}
phương pháp này hoạt động nhưng có một số bản sao dán là tốt.
2) Lừa tham số vào là một hành động:
public Result DoSomething(string parameter)
{
Result result = null;
Execute(() => result = GetProvider(parameter).DoSomething());
return result;
}
này không yêu cầu dán sao chép nhưng không trông rất đẹp.
Có cách nào để tham gia Hành động và Func bằng cách nào đó để tránh bất kỳ phương pháp nào trong số này hoặc có thể có cách khác để đạt được kết quả tương tự không?
Tôi sử dụng phương pháp tiếp cận thứ hai của bạn. Tôi không thể tìm thấy một cách hay để làm điều đó theo bất kỳ cách nào khác, vì vậy tôi sẽ quan tâm để xem bất kỳ câu trả lời nào cho câu hỏi của bạn! –
Có vẻ như liên quan: http://stackoverflow.com/q/4279210/55209 –
xem xét sử dụng các khía cạnh http://stackoverflow.com/questions/1416880/aspect-oriented-programming-in-c-sharp – Lanorkin