Saya melihat pola kode berikut di semua tempat di basis kode perusahaan saya (aplikasi .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
}
Saya mencoba membungkus kepala saya di sekitar mengapa Anda akan melakukan ini daripada memiliki Foometode hanya mengambil ID dan mengembalikan Bazobjek, bukannya mengembalikan nilai yang tidak digunakan dan memiliki objek yang sebenarnya menjadi parameter ref atau output.
Apakah ada beberapa manfaat tersembunyi dari gaya pengkodean ini yang saya lewatkan?
bazmenjadi nulldan kembali boolmakhluk falseyang tidak setara. new BazObject()tidak pernah null, jadi kecuali bazObjectdiperbarui sebelum Exceptiondilemparkan Foo, ketika falsedikembalikan baztidak akan pernah null. Ini akan membantu sangat jika spesifikasi untuk Fooyang tersedia. Sebenarnya, ini mungkin masalah paling serius yang ditunjukkan oleh kode ini.