คุณในฐานะนักพัฒนา Javascript พิจารณารูปแบบการออกแบบดั้งเดิมว่ามีความสำคัญหรือมีความสำคัญน้อยกว่าที่เคยใช้กับภาษา / สภาพแวดล้อมอื่น ๆ หรือไม่?
รูปแบบการออกแบบแบบคลาสสิกใช้ไม่ได้กับ JavaScript
สิ่งที่นำไปใช้คือการเขียนรหัสและโมดูลการทำงาน
คุณควรใช้ส่วนผสมของตัวสร้างและฟังก์ชั่นชั้นหนึ่ง
ในฐานะนักพัฒนาจาวาสคริปต์ฉันดันไปปฏิบัติกับจาวาสคริปต์เป็น LISP แทนจาวา ดังนั้นพยายามเลียนแบบ monads และรหัสลักษณะการทำงานระดับสูงแทนที่จะลองเลียนแบบรหัส OOP แบบดั้งเดิม
โปรดตั้งชื่อรูปแบบการออกแบบสามอันดับแรกที่คุณเป็นผู้พัฒนา Javascript ใช้เป็นประจำและให้ตัวอย่างว่าพวกเขาช่วยในการพัฒนา Javascript ของคุณอย่างไร
รูปแบบการออกแบบอีกครั้งไม่ได้ใช้จริงมาก แต่ด้านล่างเป็นโครงสร้างที่สำคัญสามประการ
- การใช้งานของการปิด
- การใช้ฟังก์ชั่นชั้นหนึ่ง
- การใช้โรงงานวัตถุที่มีหรือไม่มี
new
โปรดทิ้งบริบทบางอย่างไว้ซึ่งฉันสามารถแสดงตัวอย่างของเทคนิคเหล่านี้เปรียบเทียบกับการทำโค้ดชนิดเดียวกันโดยใช้รูปแบบการออกแบบดั้งเดิม
ลองมาดูรูปแบบการออกแบบคลาสสิกบางส่วนและวิธีการใช้ใน js รวมถึงรูปแบบทางเลือกที่เหมาะสมกับ js:
รูปแบบการสังเกตการณ์:
ในนี้เป็นเพียงnode.js
events.EventEmitter
ในjQuery
นี้เป็น&&$.fn.bind
$.fn.trigger
ในbackbone
นี้อยู่และBackbone.Events.trigger
Backbone.Events.bind
นี่เป็นรูปแบบทั่วไปที่ใช้ในรหัสประจำวัน
ฉันไม่เคยหยุดและคิดว่า "เฮ้ฉันใช้รูปแบบผู้สังเกตการณ์ที่นี่!" ไม่มีนี่เป็นเพียงวิธีระดับต่ำในการส่งข้อความไปรอบ ๆ หรือวิธีเปลี่ยนการเรียงซ้อน
ตัวอย่างเช่นในแบ็คโบนมุมมอง MVC ทั้งหมดเชื่อมโยงกับonchange
เหตุการณ์ของโมเดลดังนั้นการเปลี่ยนโมเดลจะลดหลั่นการเปลี่ยนแปลงใด ๆ ในมุมมองโดยอัตโนมัติ ใช่นี่เป็นรูปแบบที่ทรงพลัง แต่การใช้งานเป็นเรื่องธรรมดาในการเขียนโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์ที่ไม่ทราบว่ามีการใช้งานทุกที่
ในWebSocket
prototcol เรามี.on
สิ่งที่เราใช้ผูกกับon("message", ...
เหตุการณ์ ครั้งนี้เป็นเรื่องธรรมดามาก แต่ก็เป็นผู้สังเกตการณ์ในกระแสค่อนข้างแล้ว OOP while (byte b = Stream.ReadNextByte())
คลาสสิกของคุณตาม
สิ่งเหล่านี้ล้วนเป็นการใช้รูปแบบการสังเกตการณ์ที่ทรงพลัง แต่นี่ไม่ใช่รูปแบบที่คุณใช้ นี่เป็นส่วนที่เรียบง่ายของภาษา นี่เป็นเพียงรหัส
รูปแบบของที่ระลึก:
นี่เป็นเพียง JSON จะช่วยให้คุณสามารถทำให้สถานะของวัตถุเป็นอันดับเพื่อให้คุณสามารถยกเลิกการกระทำ
function SomeObject() {
var internalState;
this.toJSON = function() {
return internalState;
}
this.set = function(data) {
internalState = data;
}
this.restore = function(json) {
internalState = JSON.parse(json);
}
}
var o = new SomeObject();
o.set("foo"); // foo
var memento = JSON.stringify(o);
o.set("bar"); // bar
o.restore(memento);
ใน JavaScript เราให้การสนับสนุน API สำหรับของที่ระลึก เพียงกำหนดวิธีการที่เรียกว่าtoJSON
บนวัตถุใด ๆ เมื่อคุณเรียกJSON.stringify
มันจะโทรหา.toJSON
ออบเจ็กต์ของคุณภายในเพื่อรับข้อมูลจริงที่คุณต้องการทำให้เป็นอันดับกับ JSON
สิ่งนี้ช่วยให้คุณทำสแนปชอตของรหัสของคุณได้เล็กน้อย
อีกครั้งฉันไม่ได้ตระหนักถึงรูปแบบที่ระลึกนี้ นี่เป็นเพียงการใช้เครื่องมือการทำให้เป็นอนุกรมที่เป็น JSON
รูปแบบของรัฐ / รูปแบบกลยุทธ์:
คุณไม่ต้องการรูปแบบสถานะ คุณมีฟังก์ชั่นชั้นหนึ่งและประเภทแบบไดนามิก เพียงแค่ฉีดฟังก์ชั่นหรือเปลี่ยนคุณสมบัติได้ทันที