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ì Foo
phươ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?
baz
trở null
và trở bool
con người false
là 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 Exception
ném vào Foo
, khi false
được trả lại baz
sẽ 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.