Tôi thấy mẫu mã sau đây xuất hiện ở khắp nơi trong cơ sở mã của công ty tôi (ứng dụng .NET 3.5):
bool Foo(int barID, out Baz bazObject) {
try {
// do stuff
bazObject = someResponseObject;
return true;
}
catch (Exception ex) {
// log error
return false;
}
}
// calling code
BazObject baz = new BazObject();
fooObject.Foo(barID, out baz);
if (baz != null) {
// do stuff with baz
}
Tôi đang cố gắng che giấu lý do tại sao bạn sẽ làm điều này thay vì Foophương thức chỉ cần lấy ID và trả về một Bazđối tượng, thay vì trả về một giá trị không được sử dụng và có đối tượng thực tế là tham số đầu ra hoặc tham số đầu ra.
Có một số lợi ích tiềm ẩn của phong cách mã hóa này mà tôi đang thiếu?
baztrở nullvà trở boolcon người falselà không tương đương. new BazObject()là không bao giờ null, vì vậy trừ khi bazObjectđược cập nhật trước khi Exceptionném vào Foo, khi falseđược trả lại bazsẽ không bao giờ null. Nó sẽ giúp rất nhiều nếu các đặc tả cho Foođã có sẵn. Trong thực tế, đây có lẽ là vấn đề nghiêm trọng nhất được thể hiện bởi mã này.