กฎคือคุณทำสิ่งที่สัญญาของวิธีการของคุณต้องการ
ฉันสามารถเห็นหลายวิธีในการกำหนดสัญญาที่มีความหมายสำหรับstop
วิธีการดังกล่าว มันอาจเป็นวิธีที่สมบูรณ์แบบสำหรับstop
วิธีการทำอะไรอย่างแน่นอนถ้าผู้เล่นไม่ได้เล่น ในกรณีนี้คุณกำหนด API ตามเป้าหมาย คุณต้องการเปลี่ยนไปใช้stopped
สถานะและstop
วิธีการทำ - เพียงแค่เปลี่ยนจากstopped
รัฐเป็นตัวเองโดยไม่มีข้อผิดพลาด
มีเหตุผลใดบ้างที่คุณต้องการส่งข้อยกเว้น หากรหัสผู้ใช้จะมีลักษณะเช่นนี้ในที่สุด:
try {
player.stop();
} catch(IllegalStateException e) {
// do nothing, player was already stopped
}
ดังนั้นจึงไม่มีประโยชน์ที่จะมีข้อยกเว้นนั้น ดังนั้นคำถามคือผู้ใช้จะดูแลเกี่ยวกับความจริงที่ว่าผู้เล่นหยุดแล้วหรือไม่? เขามีอีกวาเพื่อสอบถามหรือไม่
ผู้เล่นอาจจะสังเกตได้และแล้วอาจแจ้งให้ผู้สังเกตการณ์เกี่ยวกับบางสิ่งบางอย่าง - เช่นแจ้งสังเกตการณ์เมื่อมัน transitons จากplaying
ที่จะไปstopping
stopped
ในกรณีนี้การมีวิธีการโยนข้อยกเว้นไม่จำเป็น การโทรstop
จะไม่ทำอะไรเลยถ้าผู้เล่นหยุดแล้วและการโทรเมื่อมันไม่หยุดจะแจ้งให้ผู้สังเกตการณ์ทราบเกี่ยวกับการเปลี่ยน
ทั้งหมดขึ้นอยู่กับว่าตรรกะของคุณจะจบลงที่ใด แต่ฉันคิดว่ามีตัวเลือกการออกแบบที่ดีกว่าจากนั้นก็ยกเว้น
คุณควรโยนข้อยกเว้นหากผู้โทรเข้ามาแทรกแซง ในกรณีนี้เขาไม่จำเป็นต้องทำคุณสามารถปล่อยให้ผู้เล่นเป็นอย่างที่มันเป็นและมันยังคงทำงานต่อไป