แนะนำ
โหมดคำสั่งถูกกำหนดเป็น: ใช้เพื่อห่อหุ้มคำขอลงในวัตถุเพื่อให้คุณสามารถกำหนดพารามิเตอร์ไคลเอนต์ด้วยคำขอที่แตกต่างกัน คำขอคิวหรือบันทึกและดำเนินการที่เพิกถอนได้ กล่าวอีกนัยหนึ่งโหมดการเปลี่ยนแปลงได้รับการออกแบบมาเพื่อห่อหุ้มการโทรการร้องขอและการทำงานของฟังก์ชั่นลงในวัตถุเดียวจากนั้นทำการประมวลผลชุดบนวัตถุ นอกจากนี้วัตถุคำสั่งและวัตถุที่ได้รับสามารถแยกได้โดยการเรียกวัตถุที่ใช้งานฟังก์ชั่นเฉพาะ
ข้อความ
มาแสดงรูปแบบนี้ผ่านโปรแกรมการซื้อยานพาหนะก่อนกำหนดระดับการดำเนินการเฉพาะของการซื้อยานพาหนะ:
การคัดลอกรหัสมีดังนี้:
$ (function () {
var carmanager = {
// ขอข้อมูล
RequestInfo: ฟังก์ชั่น (โมเดล, id) {
ส่งคืนข้อมูลสำหรับ ' + โมเดล +
'with id' + id + 'คือ foobar';
-
// ซื้อรถ
Buyvehicle: ฟังก์ชั่น (รุ่น, id) {
ส่งคืน 'คุณได้ซื้อสินค้าสำเร็จ'
+ id + ', a' + โมเดล;
-
// จัดระเบียบมุมมอง
การจัดเรียง VIEWIEWING: ฟังก์ชั่น (โมเดล, ID) {
return 'คุณได้จองมุมมองของ' สำเร็จแล้ว '
+ โมเดล + '(' + id + ')';
-
-
-
มาดูรหัสด้านบนกันเถอะ เราเพียงแค่เรียกใช้คำสั่ง Manager โดยการเรียกใช้ฟังก์ชัน อย่างไรก็ตามในบางกรณีเราไม่ต้องการเรียกใช้วิธีการโดยตรงภายในวัตถุ สิ่งนี้จะเพิ่มการพึ่งพาระหว่างวัตถุ ตอนนี้เรามาขยาย carmanager นี้เพื่อรับคำขอการประมวลผลใด ๆ จากวัตถุ Carmanager รวมถึงรุ่นและรหัสรถยนต์ ตามคำจำกัดความของรูปแบบคำสั่งเราหวังว่าจะใช้การเรียกใช้ฟังก์ชันต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
carmanager.execute ({CommandType: "buyvehicle", operand1: 'Ford Escort', operand2: '453543'});
ตามข้อกำหนดนี้เราสามารถใช้วิธี carmanager.execute ด้วยวิธีนี้:
การคัดลอกรหัสมีดังนี้:
carmanager.execute = function (คำสั่ง) {
return carmanager [command.request] (command.model, command.carid);
-
หลังจากการแปลงการโทรนั้นง่ายกว่ามากและสามารถนำการโทรไปได้ต่อไปนี้ (แน่นอนรายละเอียดข้อยกเว้นบางอย่างยังคงต้องปรับปรุง):
การคัดลอกรหัสมีดังนี้:
carmanager.execute ({คำขอ: "arrangeviewing", รุ่น: 'Ferrari', carid: '145523'});
carmanager.execute ({คำขอ: "requestinfo", รุ่น: 'Ford Mondeo', carid: '543434'});
carmanager.execute ({คำขอ: "requestinfo", รุ่น: 'Ford Escort', carid: '543434'});
carmanager.execute ({คำขอ: "buyvehicle", รุ่น: 'Ford Escort', carid: '543434'});
สรุป
โหมดคำสั่งนั้นง่ายกว่าในการออกแบบคิวคำสั่งและง่ายกว่าที่จะนับคำสั่งลงในบันทึกเมื่อจำเป็นและอนุญาตให้ฝ่ายที่ยอมรับคำขอเพื่อตัดสินใจว่าจะเรียกมันหรือไม่และยังสามารถใช้การเพิกถอนและรีเซ็ตคำขอได้ ยิ่งกว่านั้นเนื่องจากคลาสที่เฉพาะเจาะจงที่เพิ่มขึ้นจะไม่ส่งผลกระทบต่อคลาสอื่น ๆ จึงเป็นเรื่องง่ายที่จะนำไปใช้
แต่หลักการของการพัฒนาแบบว่องไวบอกเราว่าอย่าเพิ่มฟังก์ชั่นการคาดเดาและไม่พึงประสงค์ในรหัส หากคุณไม่แน่ใจว่าระบบต้องการโหมดคำสั่งหรือไม่โดยทั่วไปคุณไม่ควรรีบดำเนินการ ในความเป็นจริงมันไม่ยากที่จะใช้โหมดนี้เมื่อจำเป็น มันมีความหมายเท่านั้นที่จะ refactor รหัสต้นฉบับเป็นโหมดคำสั่งเมื่อจำเป็นอย่างแท้จริงเช่นการเลิกทำการกู้คืนการดำเนินการและฟังก์ชั่นอื่น ๆ