ฉันเป็นแฟนตัวยงของการเขียนข้อตกลงสัญญาหรือเช็คประเภทใดก็ได้ที่มีในภาษาที่ฉันใช้ สิ่งหนึ่งที่ทำให้ฉันรำคาญใจเล็กน้อยคือฉันไม่แน่ใจว่าการปฏิบัติทั่วไปสำหรับการตรวจสอบซ้ำซ้อนคืออะไร
สถานการณ์ตัวอย่าง: ฉันเขียนฟังก์ชันต่อไปนี้ก่อน
void DoSomething( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
//code using obj
}
หลังจากนั้นไม่กี่ชั่วโมงฉันก็เขียนฟังก์ชั่นอื่นที่เรียกอันแรก เนื่องจากทุกสิ่งยังคงสดในหน่วยความจำฉันตัดสินใจที่จะไม่ทำสัญญาซ้ำเนื่องจากฉันรู้ว่าจะDoSomething
ตรวจสอบวัตถุที่มีค่าว่างอยู่แล้ว:
void DoSomethingElse( object obj )
{
//no Requires here: DoSomething will do that already
DoSomething( obj );
//code using obj
}
ปัญหาที่ชัดเจน: DoSomethingElse
ตอนนี้ขึ้นอยู่กับDoSomething
การตรวจสอบว่า obj ไม่เป็นโมฆะ ดังนั้นควรDoSomething
ตัดสินใจว่าจะไม่ตรวจสอบอีกต่อไปหรือถ้าฉันตัดสินใจใช้ฟังก์ชันอื่น obj อาจไม่ได้รับการตรวจสอบอีกต่อไป ซึ่งทำให้ฉันเขียนการใช้งานนี้หลังจากทั้งหมด:
void DoSomethingElse( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
DoSomething( obj );
//code using obj
}
ปลอดภัยเสมอไม่ต้องกังวลยกเว้นว่าหากสถานการณ์เติบโตวัตถุเดียวกันอาจถูกตรวจสอบหลายครั้งและเป็นรูปแบบของการทำซ้ำและเราทุกคนรู้ว่ามันไม่ดี
การปฏิบัติที่พบบ่อยที่สุดสำหรับสถานการณ์เช่นนี้คืออะไร?
ArgumentBullException
? นั่นคือใหม่ :)