ไม่มีเหตุผลที่จะกลับมาtrue
ประสบความสำเร็จหากคุณไม่กลับมาfalse
ล้มเหลวอีก รหัสลูกค้าควรมีลักษณะอย่างไร
if (result = tryMyAPICall()) {
// business logic
}
else {
// this will *never* happen anyways
}
ในกรณีนี้ผู้โทรต้องการบล็อกแบบลองต่อไป แต่ก็สามารถเขียนได้ดีกว่า:
try {
result = tryMyAPICall();
// business logic
// will only reach this line when no exception
// no reason to use an if-condition
} catch (SomeException se) { }
ดังนั้นtrue
ค่าที่ส่งคืนจะไม่เกี่ยวข้องอย่างสมบูรณ์สำหรับผู้โทร void
ดังนั้นเพียงแค่ให้วิธีการ
โดยทั่วไปมีสามวิธีในการออกแบบโหมดความล้มเหลว
- ส่งคืนจริง / เท็จ
- ใช้
void
ยกเว้น (ทำเครื่องหมาย) แล้วโยน
- ส่งคืนวัตถุผลลัพธ์ระดับกลาง
ส่งคืนtrue
/false
สิ่งนี้ใช้ใน API แบบเก่ากว่าซึ่งส่วนใหญ่เป็น c-style ข้อเสียคือ obviuos คุณไม่รู้ว่าเกิดอะไรขึ้น PHP ทำสิ่งนี้บ่อยครั้งนำไปสู่การใช้รหัสเช่นนี้:
if (xyz_parse($data) === FALSE)
$error = xyz_last_error();
ในบริบทแบบมัลติเธรดนี่แย่ยิ่งกว่าเดิม
โยนข้อยกเว้น (ตรวจสอบ)
นี่เป็นวิธีที่ดีที่จะทำ ในบางจุดคุณสามารถคาดหวังความล้มเหลว Java ทำเช่นนี้กับซ็อกเก็ต สมมติฐานพื้นฐานคือการโทรควรประสบความสำเร็จ แต่ทุกคนรู้ว่าการดำเนินการบางอย่างอาจล้มเหลว การเชื่อมต่อซ็อกเก็ตอยู่ในหมู่พวกเขา ดังนั้นผู้โทรจึงถูกบังคับให้จัดการกับความล้มเหลว มันเป็นการออกแบบที่ดีเพราะมันทำให้แน่ใจว่าผู้โทรจริง ๆ จัดการกับความล้มเหลวและทำให้ผู้โทรเป็นวิธีที่สง่างามในการจัดการกับความล้มเหลว
ส่งคืนวัตถุผลลัพธ์
นี่เป็นอีกวิธีที่ดีในการจัดการกับสิ่งนี้ มันมักจะใช้สำหรับการแยกหรือสิ่งที่ต้องได้รับการตรวจสอบ
ValidationResult result = parser.validate(data);
if (result.isValid())
// business logic
else
error = result.getvalidationError();
นิสัยดีสะอาดสำหรับผู้โทรเช่นกัน
มีการถกเถียงกันเล็กน้อยเมื่อใช้กรณีที่สองและเมื่อใช้กรณีที่สาม บางคนเชื่อว่าข้อยกเว้นควรเป็นข้อยกเว้นและคุณไม่ควรออกแบบโดยคำนึงถึงความเป็นไปได้ของข้อยกเว้นและจะใช้ตัวเลือกที่สามเสมอ นั่นเป็นเรื่องปกติ แต่เราได้ตรวจสอบข้อยกเว้นใน Java ดังนั้นฉันไม่เห็นเหตุผลที่จะไม่ใช้มัน ฉันใช้ expetions ที่ตรวจสอบแล้วเมื่อสมมติฐานพื้นฐานคือการโทรควรดำเนินการต่อ (เช่นการใช้ซ็อกเก็ต) แต่ความล้มเหลวเป็นไปได้และฉันใช้ตัวเลือกที่สามเมื่อการโทรไม่ชัดเจนอย่างชัดเจน แต่มีความคิดเห็นที่แตกต่างกันในเรื่องนี้
ในกรณีของคุณฉันจะไปกับ+void
Exception
คุณคาดหวังว่าการอัปโหลดไฟล์จะดำเนินต่อไปและเมื่อมันไม่ยอดเยี่ยม แต่ผู้โทรถูกบังคับให้จัดการกับโหมดความล้มเหลวนั้นและคุณสามารถส่งคืนข้อยกเว้นที่อธิบายถึงข้อผิดพลาดประเภทใดที่เกิดขึ้น