Saya penggemar tulisan, kontrak, atau jenis cek apa pun yang tersedia dalam bahasa yang saya gunakan. Satu hal yang sedikit mengganggu saya adalah bahwa saya tidak yakin apa praktik umum untuk menangani cek duplikat.
Contoh situasi: Saya pertama-tama menulis fungsi berikut
void DoSomething( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
//code using obj
}
kemudian beberapa jam kemudian saya menulis fungsi lain yang memanggil yang pertama. Karena semuanya masih segar dalam memori, saya memutuskan untuk tidak menduplikasi kontrak, karena saya tahu bahwa kita DoSomething
akan mengecek objek nol:
void DoSomethingElse( object obj )
{
//no Requires here: DoSomething will do that already
DoSomething( obj );
//code using obj
}
Masalah yang jelas: DoSomethingElse
sekarang tergantung pada DoSomething
untuk memverifikasi bahwa obj bukan nol. Jadi sebaiknya jangan DoSomething
pernah memutuskan untuk tidak memeriksa lagi, atau jika saya memutuskan untuk menggunakan fungsi lain, obj mungkin tidak diperiksa lagi. Yang membuat saya menulis implementasi ini:
void DoSomethingElse( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
DoSomething( obj );
//code using obj
}
Selalu aman, jangan khawatir, kecuali bahwa jika situasinya tumbuh, objek yang sama mungkin diperiksa beberapa kali dan ini merupakan bentuk duplikasi dan kita semua tahu itu tidak begitu baik.
Apa praktik paling umum untuk situasi seperti ini?
ArgumentBullException
? Itu yang baru :)