สร้างเว็บแอปในฝั่งเซิร์ฟเวอร์กับฝั่งไคลเอ็นต์กับลูกผสมหรือไม่ [ปิด]


27

ขณะนี้มีหลายวิธีในการสร้างเว็บแอปพลิเคชัน:

1. ฝั่งเซิร์ฟเวอร์เท่านั้น

นี่เป็นวิธีการแบบคลาสสิกที่คุณแสดงหน้าเว็บบนเซิร์ฟเวอร์โดยเฟรมเวิร์กเว็บเช่น Ruby on Rails, Django, Express, Play! กรอบงานและอื่น ๆ

เวิร์กโฟลว์ทั่วไป : สร้างตรรกะทางธุรกิจรุ่นและมุมมองแม่แบบทั้งหมดของคุณบนเซิร์ฟเวอร์ในกรอบที่คุณเลือก

2. ฝั่งไคลเอ็นต์ + REST API

ไม่นานมานี้ชุมชนเว็บโดยรวมเริ่มสร้างแอปพลิเคชันฝั่งไคลเอ็นต์ใน Angular, Backbone, Ember และเฟรมเวิร์ก JavaScript MV * อื่น ๆ อีกสองสามโหล และตอนนี้เรายังมี React.js เข้าร่วมปาร์ตี้

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

เวิร์กโฟลว์ทั่วไป : ใช้เวลาเป็นชั่วโมงตัดสินใจเลือก Angular vs Backbone กับ Ember vs X จากนั้นคุณสร้างเส้นทางรุ่นมุมมองตัวควบคุมบนไคลเอนต์ หลังจากที่คุณทำเสร็จแล้วตอนนี้สร้างแบบจำลองตัวควบคุมเส้นทางบนเซิร์ฟเวอร์ ในแบบที่คุณทำงานสองเท่า

3. ไฮบริด

ฉันไม่รู้มากเกี่ยวกับการใช้วิธีการนี้ แต่ถ้าฉันจะเดาคุณแสดงมุมมองของคุณ (ดูกรอบ MVC) บนเซิร์ฟเวอร์ ดังนั้นคุณจะได้รับการสนับสนุน SEO พร้อมโหลดหน้าเว็บได้เร็วขึ้น

ที่ด้านหน้าไฮบริดนั้นมีการเรนเดอร์ของairbnbที่รวมเอากระดูกสันหลังเข้าด้วยกันและแสดงร่วมกัน

เอริค Florenzo ได้โพสต์ในบล็อกของเขาในวันนี้: การตอบสนอง: ในที่สุดเว็บสแต็คเซิร์ฟเวอร์

จำนวนวิธีในการสร้างเว็บแอปพลิเคชั่นนั้นมีมากมาย และสำหรับคนที่เรียนรู้การพัฒนาเว็บสิ่งนี้อาจกลายเป็นปัญหาได้ เราจะตัดสินใจได้อย่างไรว่าจะใช้วิธีการใดเพื่อสร้างแอปพลิเคชั่นถัดไป


1
"ฝั่งไคลเอ็นต์เท่านั้น: ... หลังจากทำเสร็จแล้วให้สร้างโมเดลตัวควบคุมเส้นทางบนเซิร์ฟเวอร์" นี่ไม่ได้แยกวิเคราะห์
user16764

@ user16764 อัปเดตคำถามของฉัน
คะแนน R

ลิงค์ที่น่าสนใจ: kreuzwerker.de/en/blog/posts/… , branchandbound.net/blog/web/2012/11/…
dagnelies

คำตอบ:


13

ฉันคิดว่าคุณเข้าใจผิดว่า "ฝั่งลูกค้าเท่านั้น" โดยสิ้นเชิง

ประการแรกควรมีข้อความว่า "ลูกค้าเป็นศูนย์กลาง" จุดทั้งหมดของเฟรมเวิร์กเช่น Angular คือส่วน "VC" ของ MVC ถูกนำไปใช้อย่างสมบูรณ์ในเบราว์เซอร์ใน Javascript ตรรกะระดับ "M" ที่สูงขึ้นของส่วน "M" - รุ่น - ถูกนำไปใช้ในเบราว์เซอร์และตรรกะ "CRUD" ระดับต่ำกว่าจะถูกนำมาใช้บนเซิร์ฟเวอร์

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

ในกรณีที่รุนแรงคุณสามารถใช้รูปแบบทั้งหมดในไคลเอนต์ถ้าเป็นที่ยอมรับในการเข้าถึงข้อมูลจากเบราว์เซอร์เดียวบนเครื่องเดียวและมีข้อมูลในถังขยะทุกครั้งที่มีการเลือกตัวเลือก "ล้างคุกกี้"


มันยากมากที่จะไม่พัฒนาตรรกะทางธุรกิจอย่างน้อยสองครั้ง เพื่อประสบการณ์การใช้งานที่ดีคุณต้องแน่ใจว่าผู้ใช้ป้อนอีเมลเพื่อดำเนินการต่อ แต่คุณไม่สามารถไว้วางใจไคลเอนต์ได้ดังนั้นคุณต้องใช้กฎบนเซิร์ฟเวอร์ อย่างน้อยฉันก็หวังว่าคุณจะไม่พูดว่าใช้ตรรกะทางธุรกิจใน JS กับลูกค้า
Andy

@ นี่คือประเด็นของฉัน เมื่อฉันสร้างแอป Ember การตรวจสอบรูปแบบพื้นฐานจะต้องทำกับลูกค้า แต่ก็จำเป็นต้องทำบนเซิร์ฟเวอร์ด้วย ฉันประสบปัญหาร้ายแรงครั้งหนึ่งที่ไม่ได้ตรวจสอบความถูกต้องของข้อมูลบนเซิร์ฟเวอร์และเชื่อถือลูกค้าได้อย่างสมบูรณ์
คะแนน R

Andy และทั้งหมด - ลองดูที่ Google เอกสาร นอกเหนือจากการโหลดเอกสารสเปรดชีตและอื่น ๆ จากเซิร์ฟเวอร์บันทึกในตอนท้ายและทำการสำรองข้อมูลเป็นครั้งคราวระหว่างสิ่งอื่น ๆ ที่เกิดขึ้นในเบราว์เซอร์ของคุณ ไซต์ Google เอกสารทำหน้าที่เป็นที่เก็บข้อมูลและเซิร์ฟเวอร์การตรวจสอบความถูกต้อง
James Anderson

3
@JamesAnderson Google เอกสารค่อนข้างแตกต่างจากร้านค้าออนไลน์ คุณกำลังแก้ไขเอกสารของคุณเองมันเป็นเพียงส่วนหนึ่งของข้อมูลที่พวกเขาบันทึกโดยไม่ต้องสนใจว่าข้อมูลหมายถึงอะไรจริงๆ แต่คุณคิดว่าการตรวจสอบความถูกต้องของคำสั่งควรทำกับลูกค้าหรือไม่ คุณแค่ขอให้ผู้คนมอบผลิตภัณฑ์ฟรีให้ตัวเองถ้านั่นเป็นวิธีที่คุณสร้างแอพดังกล่าว ดูเหมือนว่าคุณจะสมมติว่า Google ไม่ได้ทำการตรวจสอบความถูกต้องของข้อมูลที่ปลายเซิร์ฟเวอร์ ไม่มีทางที่เราจะรู้ได้ว่าเกิดอะไรขึ้น
Andy

9

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

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

งานของคุณคือการอธิบายข้อดีข้อเสียเบื้องหลังแต่ละวิธี


1
ขอบคุณ สิ่งที่คุณพูดมีเหตุผล ฉันหวังว่าจะมี "กระสุนเงิน" วิธีหนึ่งที่แท้จริงในการทำสิ่งต่าง ๆ ฉันเริ่มด้วย Python web framework ชื่อ Django ในปี 2011 หลังจากนั้นไม่นานก็มีการผลักดันเฟรมเวิร์ก MV * ฝั่งไคลเอ็นต์อย่าง Backbone, Angular, Ember และทันใดนั้น Rails และ Django ในการสร้างเว็บแอปกลายเป็นสิ่งล้าสมัย แต่วันนี้ดูเหมือนว่าเรากำลังก้าวไปข้างหน้าและคลุกเคล้าฝั่งไคลเอ็นต์กับฝั่งเซิร์ฟเวอร์อีกครั้งเพื่อให้ได้ประสิทธิภาพที่ดีขึ้น
คะแนน R

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

1
นี่เป็นเรื่องปกติ แต่บางครั้งวิธีการทั้งสองอาจเป็นไปได้และในกรณีนี้คุณต้องการสิ่งอื่นนอกเหนือจากข้อกำหนดในการตัดสินใจ
Ced

5

ฉันคิดว่าหนึ่งในประเด็นสำคัญของแนวทางและกรอบการทำงานที่ใหม่กว่าคือมีการเชื่อมต่อระหว่างเทคโนโลยีส่วนหน้าและเทคโนโลยีส่วนหลังน้อยกว่า

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

สิ่งนี้ช่วยให้เราเลือกเครื่องมือที่ดีที่สุดในการทำงานให้เสร็จและตัวเลือกของเราสามารถพัฒนาได้อย่างอิสระ

เป็นที่ยอมรับว่าฉันไม่ได้ใช้ Angular หรือ Backbone ดังนั้นฉันจึงไม่สามารถให้คำแนะนำที่มีประสบการณ์ได้ สแต็กฐานปัจจุบันของฉันประกอบด้วย mvc ฝั่งเซิร์ฟเวอร์ที่บางที่สุดหรือบริการที่เงียบสงบที่ฉันสามารถหาได้ ส่งเทมเพลตและข้อมูลเป็นส่วนใหญ่ ข้อมูลถูกเรนเดอร์และ / หรือข้อมูลที่ตามมาซึ่งถูกดึงมาจากฝั่งไคลเอ็นต์โดยใช้เพียงแค่จาวาสคริปต์, jquery และ css

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

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