ถูกหรือผิดฉันกำลังเชื่อว่าฉันควรพยายามทำให้รหัสของฉันแข็งแกร่งที่สุดเท่าที่จะเป็นไปได้แม้ว่าจะหมายถึงการเพิ่มรหัส / เช็คซ้ำซ้อนที่ฉันรู้ว่าตอนนี้ฉันจะไม่ใช้ประโยชน์ แต่อย่างใด อาจเป็นจำนวนปี x ลงบรรทัด
ตัวอย่างเช่นฉันกำลังทำงานกับแอปพลิเคชันมือถือที่มีรหัสนี้:
public static CalendarRow AssignAppointmentToRow(Appointment app, List<CalendarRow> rows)
{
//1. Is rows equal to null? - This will be the case if this is the first appointment.
if (rows == null) {
rows = new List<CalendarRow> ();
}
//2. Is rows empty? - This will be the case if this is the first appointment / some other unknown reason.
if(rows.Count == 0)
{
rows.Add (new CalendarRow (0));
rows [0].Appointments.Add (app);
}
//blah...
}
เมื่อดูที่ส่วนที่สองโดยเฉพาะฉันรู้ว่าถ้าส่วนหนึ่งเป็นจริงส่วนที่สองก็จะเป็นจริงเช่นกัน ฉันไม่สามารถคิดเหตุผลใด ๆ ว่าทำไมส่วนที่หนึ่งจะเป็นเท็จและส่วนที่สองประเมินความจริงซึ่งทำให้if
คำสั่งที่สองซ้ำซ้อน
อย่างไรก็ตามอาจมีกรณีในอนาคตที่if
จำเป็นต้องใช้คำสั่งที่สองนี้และด้วยเหตุผลที่ทราบ
บางคนอาจมองเรื่องนี้ในตอนแรกและคิดว่าฉันกำลังเขียนโปรแกรมกับอนาคตในใจซึ่งเห็นได้ชัดว่าเป็นสิ่งที่ดี แต่ฉันรู้ว่ามีบางกรณีที่รหัสประเภทนี้มีข้อบกพร่อง "ซ่อน" จากฉัน หมายความว่าฉันต้องใช้เวลานานกว่านี้ในการคิดว่าทำไมฟังก์ชั่นถึงxyz
ทำabc
เมื่อมันควรจะทำจริงdef
ๆ
ในทางกลับกันก็มีหลายครั้งที่โค้ดประเภทนี้ทำให้ง่ายขึ้นมากในการปรับปรุงโค้ดด้วยพฤติกรรมใหม่เพราะฉันไม่ต้องย้อนกลับไปและตรวจสอบให้แน่ใจว่ามีการตรวจสอบที่เกี่ยวข้องทั้งหมด
มีกฎทั่วไปของกฎหัวแม่มือสำหรับรหัสประเภทนี้หรือไม่ (ฉันจะสนใจที่จะฟังเช่นกันว่านี่จะเป็นการปฏิบัติที่ดีหรือไม่ดีหรือไม่)
หมายเหตุ: อาจถือได้ว่าคล้ายกับคำถามนี้แต่ไม่เหมือนคำถามนั้นฉันต้องการคำตอบสมมติว่าไม่มีกำหนดเวลา
TLDR:ฉันควรจะไปไกลถึงการเพิ่มรหัสซ้ำซ้อนเพื่อให้มันแข็งแกร่งขึ้นในอนาคตหรือไม่
if(rows.Count == 0)
จะไม่เกิดขึ้นคุณสามารถยกข้อยกเว้นเมื่อมันเกิดขึ้น - และตรวจสอบว่าทำไมสมมติฐานของคุณผิด
rows
เป็นโมฆะ? ไม่มีเหตุผลที่ดีอย่างน้อยใน. NET สำหรับคอลเลกชันที่เป็นโมฆะ ที่ว่างเปล่านั่นเอง แต่ไม่null ฉันจะโยนข้อยกเว้นถ้าrows
เป็นโมฆะเพราะมันหมายความว่ามีการผิดพลาดในตรรกะโดยผู้โทร