เพื่อนร่วมงานของคุณพยายามใช้การออกแบบตามสัญญา (DbC) จากภาษาไอเฟลและอ้างอิงจากหนังสือ: Object Oriented Software Construction, 2nd Edition
การยืนยันตามที่เขาใช้จะเป็น {P} - ส่วนหนึ่งของ Hoare Logic หรือ Hoare Triple: {P} C {Q} โดยที่ {P} คือการยืนยันเงื่อนไขล่วงหน้า (ไอออน) และ {Q} คือ หลังเงื่อนไขยืนยัน (ไอออน) s.
ฉันจะจดบันทึกคำแนะนำที่สำคัญเกี่ยวกับคุณสมบัติยืนยันใน PHP ที่มีข้อบกพร่อง คุณไม่ต้องการใช้รหัสบั๊กกี้ สิ่งที่คุณต้องการจริงๆคือผู้สร้าง PHP เพื่อแก้ไขข้อบกพร่องในการยืนยัน จนกว่าจะเป็นเช่นนั้นคุณสามารถใช้การยืนยันได้ แต่ใช้โดยคำนึงถึงสภาพรถในปัจจุบัน
ยิ่งไปกว่านั้นหากคุณสมบัติการยืนยันมีข้อผิดพลาดฉันขอแนะนำให้คุณอย่าใช้ในรหัสการผลิต อย่างไรก็ตามฉันขอแนะนำให้คุณใช้ในการพัฒนาและทดสอบโค้ดตามความเหมาะสม
สุดท้าย - หากคุณศึกษาการออกแบบตามสัญญาคุณจะพบว่ามีผลที่ตามมาจากการใช้คำยืนยันแบบบูลีนในแง่ของการสืบทอดคลาสสิกเชิงวัตถุนั่นคือคุณจะต้องไม่ทำให้เงื่อนไขเบื้องต้นอ่อนแอลงหรือทำให้เงื่อนไขภายหลังอ่อนแอลง การทำเช่นนั้นอาจเป็นอันตรายต่อวัตถุที่เป็นลูกหลานของคุณที่มีปฏิสัมพันธ์ซึ่งกันและกัน จนกว่าคุณจะเข้าใจความหมาย - ฉันจะปล่อยมันไว้คนเดียว!
ยิ่งไปกว่านั้น - ฉันขอแนะนำให้ผู้ผลิต PHP ทำการศึกษาการออกแบบอย่างละเอียดตามสัญญาและพยายามที่จะใส่ลงใน PHP ASAP! จากนั้นเราทุกคนจะได้รับประโยชน์จากการมีคอมไพเลอร์ / ล่ามที่รับรู้ DbC ซึ่งจะจัดการกับปัญหาที่ระบุไว้ในคำตอบ (ด้านบน):
- คอมไพเลอร์ที่รับรู้การออกแบบตามสัญญาที่นำไปใช้อย่างถูกต้อง (หวังว่า) จะปราศจากข้อผิดพลาด (ไม่เหมือนกับการยืนยัน PHP ในปัจจุบัน)
- คอมไพเลอร์ที่ตระหนักถึงการออกแบบตามสัญญาที่นำไปใช้อย่างถูกต้องจะจัดการกับความแตกต่างของการจัดการตรรกะการยืนยันแบบหลายรูปแบบให้คุณแทนที่จะใช้สมองของคุณในเรื่องนี้
หมายเหตุ: แม้แต่การใช้if
-statement เพื่อทดแทนการยืนยัน (เงื่อนไขเบื้องต้น) จะได้รับผลกระทบที่เลวร้ายหากใช้เพื่อเสริมสร้างเงื่อนไขเบื้องต้นหรือทำให้สภาวะหลังอ่อนแอลง เพื่อให้เข้าใจถึงความหมายคุณจะต้องศึกษาการออกแบบตามสัญญาเพื่อทราบ! :-)
มีความสุขในการเรียนและเรียนรู้
'isset
(สายรหัสด้วยassert
)? ไม่ใช่แค่isset
(ไม่มีเครื่องหมายคำพูดเดียว'
)?