การใช้ภาษาเดียวกันกับไคลเอนต์และเซิร์ฟเวอร์มีความสำคัญอย่างไร


11

ฉันได้ประเมินโซลูชันสถาปัตยกรรมสำหรับโครงการมือถือที่จะมีบริการบนเว็บ / แอพนอกเหนือจากแอพพื้นฐานและได้ดูห้องสมุดกรอบงานและสแต็กต่าง ๆ เช่นMeteorซึ่งเป็นประเภทของ "open stack package framework" ถูกผูกไว้อย่างแน่นหนากับNode.js

มีการพูดคุยกันมากมายเกี่ยวกับประโยชน์ของการใช้ภาษาเดียวกันทั้งฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์และฉันไม่เข้าใจ ฉันสามารถเข้าใจว่าคุณต้องการสะท้อนสถานะทั้งหมดของเว็บแอปพลิเคชันบนทั้งไคลเอนต์และเซิร์ฟเวอร์ แต่พยายามดิ้นรนเพื่อหาชัยชนะอื่น ๆ ... ประสิทธิภาพของเวิร์กโฟลว์?

ฉันพยายามที่จะเข้าใจว่าทำไมความเท่าเทียมกันของภาษาของลูกค้า / เซิร์ฟเวอร์จึงถือเป็นจอกศักดิ์สิทธิ์ เหตุใดความเท่าเทียมกันของภาษาไคลเอนต์ / เซิร์ฟเวอร์จึงมีความสำคัญในการพัฒนาซอฟต์แวร์


12
ฉันเถียงว่านี่ไม่ใช่สิ่งที่ดีโดยเฉพาะอย่างยิ่งเมื่อ JavaScript เป็นภาษาที่สงสัย
Latty

4
ฉันต้องยอมรับว่าฉันยังไม่ได้ไปถึงช่วงเวลาที่ศักดิ์สิทธิ์กับ JS และดังนั้นจึงไม่เข้าใจว่าทำไมคุณต้องการเขียนรหัสเซิร์ฟเวอร์ด้วย แต่นั่นเป็นอีกหัวข้อหนึ่ง ..
Makita

1
ขอบคุณสำหรับการโพสต์ครั้งแรกของคุณในการแลกเปลี่ยนกองโปรแกรมเมอร์ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่มการโหวตสูงสุดและการลดคะแนนโหวตให้อ่านคำถามที่พบบ่อย คุณอาจถูกโหวตให้โหวตเพราะคำถามของคุณเป็นหัวข้อสนทนามากกว่าสิ่งที่มีคำตอบเฉพาะ อาจใช้เวลาสักครู่เพื่อทำความคุ้นเคยกับรูปแบบที่นี่ คำตอบสั้น ๆ ที่ไร้รายละเอียดลงคะแนน ดังนั้นคำตอบคือการอภิปรายหัวข้อ มีพื้นกลางที่มีคำถามหรือคำตอบเฉพาะ แต่มีความเป็นสากลมากพอและมีหัวข้อที่มีรายละเอียดในปริมาณที่เหมาะสม
DeveloperDon

1
ฉันจะเถียงกับมัน ด้วยการใช้ภาษาเดียวกันสำหรับทั้งเซิร์ฟเวอร์และไคลเอนต์คุณจะเสี่ยงต่อการพัวพันและคุณสมบัติเฉพาะภาษาในการสื่อสาร
Pieter B

3
@ Makita ฉันคิดว่ามันเป็นคำถามที่ถูกต้อง แต่คนมักจะมีความสุขกับ downvotes เมื่อถามตัวอย่าง ฉันได้ลบบางส่วนของคำถามเดิมและเน้นคำถามของคุณว่าเพราะเหตุใดภาษาของลูกค้า / เซิร์ฟเวอร์จึงมีความสำคัญ
maple_shaft

คำตอบ:


5

ทางด้าน PRO:

  • หากทั้งสองฝ่ายสามารถใช้ schema และรหัสได้ทั้งสองวิธีจะมีประสิทธิภาพในการใช้ตรรกะและข้อมูลที่คล้ายคลึงกันเพียงครั้งเดียว

ทางด้าน CON:

  • ไคลเอ็นต์อาจเป็นมุมมองที่เหมาะสมสำหรับภาษามาร์คอัปหรือสคริปต์เป็นหลักในขณะที่เซิร์ฟเวอร์อาจเป็นตรรกะทางธุรกิจที่เหมาะสมกับภาษาอื่นเป็นหลัก

ในการพัฒนาเว็บภาษามีการแพร่กระจายเพิ่มขึ้นสร้างเครื่องมืออันทรงพลังสำหรับส่วนที่เฉพาะเจาะจงของระบบรวมถึงความต้องการพิเศษมากมายที่ต้องเรียนรู้โดยนักพัฒนาหรือทีมนักพัฒนา ในพื้นที่อื่น ๆ เช่นการประมวลผลธุรกรรมหรือระบบฝังตัวที่เป็นไปตามระบบของวิธีการออกแบบระบบอาจมีการประหยัดจากภาษาทั่วไป

เฟรมเวิร์ก Javascript ใหม่ดูเหมือนจะมาถึงเราอย่างรวดเร็วและงานบางอย่างได้ทำเพื่อรวม APIs สำหรับส่วนหลังและเครื่องมือสำหรับส่วนหน้า อาจเป็นเรื่องที่ฉลาดที่จะรักษาความยืดหยุ่นและแยกข้อกังวลระหว่างไคลเอนต์และรหัสฝั่งเซิร์ฟเวอร์เพื่อให้คุณมีอิสระในการลอยตัวระหว่างพวกเขาโดยไม่ติดขัดนานเกินไปด้วยเครื่องมือเฉพาะ


14

น่าจะเป็นประโยชน์ที่รับรู้คือ:

เช่นทำให้การจัดการทรัพยากรง่ายขึ้นสำหรับผู้จัดการโครงการและมีผลประโยชน์ทางเทคนิคเพียงเล็กน้อยหรือไม่มีเลย (อาจเป็นประโยชน์ทางเทคนิคเชิงลบได้หากคุณจ้างม้าตัวเมียหนึ่งเคล็ดลับ)


1
เป็นประโยชน์ถ้าคุณพัฒนาด้วยตัวเองเพราะไม่มี "จิต" สลับระหว่างเซิร์ฟเวอร์และไคลเอนต์ หากคุณต้องการที่จะทำบางสิ่งบางอย่างและมีประสบการณ์อย่างมากใน JavaScript คุณอาจจะได้รับดีขึ้นและเร็วขึ้นส่งผลให้วิธีนี้ แต่ที่อาจทั้งหมด ...
K ..

คุณจะบอกว่าไม่มีข้อเสียทางเทคนิคหรือไม่อาจเป็นประโยชน์ในการใช้ภาษาที่แตกต่างกันสำหรับทุกระบบย่อยเดียว
Michael Borgwardt

1
@MichaelBorgwardt สมมติว่าแต่ละภาษามีความเหมาะสมกับระบบย่อยที่ฉันบอกว่าใช่ไม่มีข้อเสียทางเทคนิค (อาจจะไม่ได้เปรียบมากเช่นกัน) แต่อาจมีผลกระทบอย่างมากต่อการเปลี่ยนแปลงของทีมและการจ้างงาน แน่นอนว่าระบบย่อยส่วนใหญ่จะใช้งานได้ง่ายในภาษาใด ๆ ดังนั้นฉันจึงไม่คาดหวังว่าจะได้เห็นสุดยอดนี้
jk

ข้อสังเกตเกี่ยวกับเรื่องนี้เป็นความคิดที่ไม่ดีนั้นไม่ยุติธรรม มีภาษามากมายที่สามารถรวบรวมไปยัง JavaScript และภาษาฝั่งเซิร์ฟเวอร์รวมถึงLispซึ่งอันที่จริงแล้วเป็นภาษาที่ใช้ในหลักสูตร SICP ซึ่งได้รับคำชมเชยจากโพสต์บล็อกของ Joel
back2dos

@ back2dos หวังว่าจะชี้แจง
jk

2

ประโยชน์คือคุณสามารถนำความเชี่ยวชาญและรหัสของคนมาใช้ (ทั้งสองด้าน)

คน

นักพัฒนาจำเป็นต้องเชี่ยวชาญภาษาเดียวและสร้างกลุ่มเดียว แทนที่จะใช้ความเชี่ยวชาญสองกลุ่ม สิ่งนี้ทำให้การถ่ายโอนความรู้ระหว่างกันง่ายขึ้นและช่วยให้พวกเขาสามารถสลับการทำงานระหว่างไคลเอนต์และฝั่งเซิร์ฟเวอร์ได้ง่ายขึ้น สุดท้ายนี้ช่วยอำนวยความสะดวกในการสื่อสารกับสมาชิกในทีมของ "ด้านอื่น ๆ " เมื่อพูดถึงปัญหาทางเทคนิคเพราะพวกเขาแบ่งปันพื้นหลังทางเทคนิคเดียวกัน

รหัส

บางครั้งมันมีประโยชน์ที่จะมีสถานะบางอย่างในฝั่งไคลเอ็นต์หรืออัลกอริทึมหรือทั้งสองอย่าง บางครั้งก็ทำแบบเดียวกันทั้งสองด้าน ลองมาตัวอย่างของเกมที่มีผู้เล่นหลายคน: คุณต้องแสดงสถานะของเกมบนทั้งไคลเอนต์และเซิร์ฟเวอร์ นอกจากนี้คุณต้องปฏิบัติตามกฎระเบียบในฝั่งไคลเอ็นต์ (เพื่อการตอบสนอง) และฝั่งเซิร์ฟเวอร์ (เพื่อตรวจสอบความถูกต้องของการกระทำของผู้เล่น) ความสามารถในการใช้รหัสซ้ำสำหรับสิ่งเหล่านี้อาจเป็นข้อได้เปรียบที่ยิ่งใหญ่ ... ในแอปพลิเคชั่นอื่นคุณไม่จำเป็นต้องใช้สิ่งนี้เลย ... ทุกอย่างขึ้นอยู่กับกรณี

... แน่นอนว่ายังมีข้อเสีย แต่สำหรับโพสต์อื่น;)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.