ฉันทำโปรแกรมเว็บมานานแล้วและที่ไหนสักแห่งฉันก็ไม่รู้ว่าทำไมเราถึงทำสิ่งที่เราทำในวันนี้ (หรือเรามาทำสิ่งต่าง ๆ แบบนี้)?
ฉันเริ่มต้นด้วยการพัฒนาเว็บ ASP ขั้นพื้นฐานและในช่วงแรกตรรกะการแสดงผลและตรรกะทางธุรกิจได้ปะปนกันบนหน้าเว็บ การพัฒนาฝั่งไคลเอ็นต์มีความแตกต่างกันอย่างมาก (VBScript, รสชาติที่แตกต่างกันของ JavaScript) และเรามีคำเตือนมากมายเกี่ยวกับการตรวจสอบความถูกต้องของฝั่งเซิร์ฟเวอร์ (ดังนั้นฉันจึงอยู่ห่างจากตรรกะฝั่งไคลเอ็นต์)
จากนั้นฉันย้ายไปที่ ColdFusion ชั่วครู่หนึ่ง ColdFusion อาจเป็นกรอบการพัฒนาเว็บแรกที่แยกการแสดงผลและตรรกะทางธุรกิจโดยใช้แท็ก ดูเหมือนจะชัดเจนสำหรับฉัน แต่ verbose มากและ ColdFusion ไม่ได้เป็นที่ต้องการของตลาดสูงและดังนั้นฉันจึงเดินหน้าต่อไป
จากนั้นฉันก็กระโดดขึ้นไปบนเกวียน ASP.NET และเริ่มใช้วิธี MVC ของพวกเขา ฉันก็รู้ว่า Java ดูเหมือนจะเป็นภาษาหอคอยงาช้างของระบบองค์กรและยังลองใช้วิธี MVC ของพวกเขา ต่อมา ASP.NET พัฒนารูปแบบการออกแบบ MVVM นี้และ Java (แม่นยำ J2EE หรือ JEE) ก็ดิ้นรนและออกมาด้วยวิธีการ MVC2
แต่วันนี้สิ่งที่ฉันได้ค้นพบคือการเขียนโปรแกรมแบ็คเอนด์ไม่ได้อยู่ที่ความตื่นเต้นและความก้าวหน้าอีกต่อไป นอกจากนี้แนวปฏิบัติ MVC บนฝั่งเซิร์ฟเวอร์ดูเหมือนจะล้าสมัยแล้ว (ผู้คนใช้ JSTL จริง ๆ อีกหรือไม่?) ทุกวันนี้ในโครงการส่วนใหญ่ที่ฉันเปิดอยู่ฉันพบว่าเฟรมเวิร์ก JavaScript และการพัฒนาฝั่งไคลเอ็นต์เป็นสิ่งที่ความก้าวหน้าและนวัตกรรมที่น่าตื่นเต้นกำลังดำเนินไป
ทำไมการเคลื่อนไหวนี้จากเซิร์ฟเวอร์ถึงการพัฒนาฝั่งไคลเอ็นต์เกิดขึ้น? ฉันนับจำนวนบรรทัดอย่างง่ายของหนึ่งในโครงการ JEE ของฉันและมีรหัสบรรทัดใน JavaScript มากกว่าจาวา (ยกเว้นห้องสมุดบุคคลที่สาม) ฉันพบว่าการพัฒนาแบ็กเอนด์ส่วนใหญ่โดยใช้ภาษาการเขียนโปรแกรมเช่น Java หรือ C # เป็นเพียงการสร้างส่วนที่คล้ายกับส่วนที่เหลือและความพยายามอย่างหนักในการแสดงภาพข้อมูลภาพอินพุต / เอาท์พุตปฏิสัมพันธ์ของผู้ใช้ ฯลฯ ... ผ่านทางฝั่งไคลเอ็นต์เช่น Angular, Backbone, Ember, Knockout, ฯลฯ ...
ในช่วงก่อนยุค jQuery ฉันเห็นไดอะแกรมมากมายที่มีเส้นแบ่งที่ชัดเจนและเป็นแนวคิดระหว่าง M, V และ C ใน MVC ในการพัฒนาระดับ n Post-jQuery เส้นเหล่านี้ถูกวาดที่ไหน? ดูเหมือนว่า MVC และ MVVM อยู่ที่นั่นในโค้ด JavaScript ฝั่งไคลเอ็นต์
สิ่งที่ฉันต้องการรู้ก็คือทำไมเราถึงทำการเปลี่ยนแปลงเช่นนี้ (จากการเน้นการเขียนโปรแกรมฝั่งเซิร์ฟเวอร์ไปจนถึงฝั่งไคลเอ็นต์จากภาษาคอมไพล์ไปจนถึงภาษาสคริปต์จากความจำเป็นไปจนถึงการเขียนโปรแกรมเชิงปฏิบัติการทั้งหมดนี้ดูเหมือนจะเกิดขึ้นพร้อมกัน ) และการเปลี่ยนแปลง / การเปลี่ยนแปลงนี้แก้ปัญหาอะไรได้บ้าง?