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 Foo
metode hanya mengambil ID dan mengembalikan Baz
objek, 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?
baz
menjadi null
dan kembali bool
makhluk false
yang tidak setara. new BazObject()
tidak pernah null
, jadi kecuali bazObject
diperbarui sebelum Exception
dilemparkan Foo
, ketika false
dikembalikan baz
tidak akan pernah null
. Ini akan membantu sangat jika spesifikasi untuk Foo
yang tersedia. Sebenarnya, ini mungkin masalah paling serius yang ditunjukkan oleh kode ini.