Tôi có một tình huống cụ thể mà tôi cần phải bẫy các ngoại lệ và trả lại một đối tượng cho khách hàng thay cho ngoại lệ. Tôi không thể đặt logic xử lý ngoại lệ ở cấp cao hơn tức là quấn Foo trong một mệnh đề thử.Tôi làm cách nào để mã xử lý ngoại lệ tuân theo nguyên tắc DRY?
Tốt nhất là nên chứng minh bằng một số mã mẫu. Logic xử lý ngoại lệ là clouding ý định của phương pháp và nếu tôi có, nhiều phương pháp có ý định tương tự, trong lớp Foo, tôi thấy mình lặp lại hầu hết logic bắt.
Kỹ thuật tốt nhất để bao bọc chức năng ngoại lệ chung trong mã bên dưới là gì?
public class Foo
{
public Bar SomeMethodThatCanThrowExcepetion()
{
try
{
return new Bar().Execute();
}
catch(BazException ex)
{
WriteLogMessage(ex, Bar.ErrorCode);
return new Bar() { ErrorMessage = ex.Message, ErrorCode = Bar.ErrorCode;}
}
}
public Baz SomeMethodThatCanThrowExcepetion(SomeObject stuff)
{
try
{
return new Baz(stuff).Execute();
}
catch(BazException ex)
{
WriteLogMessage(ex, Baz.ErrorCode);
return new Baz() { ErrorMessage = ex.Message, ErrorCode = Baz.ErrorCode;}
}
}
}
Bạn không thể đặt ngoại lệ của mình xử lý một cấp cao hơn và ném ngoại lệ lên chuỗi? – ametren
Thật không may, tôi không thể. Tôi bị giới hạn ở đây. – fin
Có một lớp cơ sở chung giữa 'Bar' và' Baz' không? – Lee