ในขณะที่มีโรงเรียนหลายแห่งของความคิดในเรื่องนี้และแน่นอนว่าไม่มีวิธีใดที่สามารถเรียกได้ว่า "วิธีที่ถูกต้อง" ในระดับสากลในขณะที่คนอื่น ๆ ทั้งหมดเป็น "วิธีที่ผิด" ในระดับสากลมีเหตุผลหลายประการในการแยกตรรกะทางธุรกิจ และเข้าถึงวัตถุและบริการเหล่านั้นผ่านบริการ RESTful
คำตอบสั้น ๆ คือส่วนใหญ่เกี่ยวกับการบริหารความเสี่ยงและการตรวจสอบและปรับปรุงประสิทธิภาพ
ในรายละเอียด:
เหตุผลสำคัญอันดับ 1 คือความปลอดภัย ลูกค้าไม่ควรเชื่อถือได้ว่าจะส่งสิ่งอื่นใดนอกจากขยะไปยังเซิร์ฟเวอร์และโดยการรักษาความปลอดภัยด้านเซิร์ฟเวอร์คุณจะแยกความเสี่ยงที่อาจเกิดขึ้นจากผู้ใช้ที่เป็นอันตรายต่อระบบของคุณ โปรดจำไว้ว่า Javascript นั้นเป็นฝั่งไคลเอ็นต์ที่สมบูรณ์และสามารถเปลี่ยนแปลงได้เล็กน้อยดังนั้นคุณไม่สามารถไว้วางใจเอาท์พุท
เหตุผลข้อที่ 2 คือการแยกข้อกังวล โปรแกรมเมอร์ javascript ของคุณอาจไม่เชี่ยวชาญด้านความปลอดภัยและกูรูด้านความปลอดภัยของคุณอาจไม่เก่งใน Javascript ด้วยการแยกตรรกะทางธุรกิจออกจากตรรกะการนำเสนอคุณหลีกเลี่ยงการข้ามข้อกังวลเหล่านี้เนื่องจากจาวาสคริปต์จะไม่ได้รับอนุญาตให้เข้าถึงทรัพยากรที่เกินระดับการอนุญาตและจะได้รับข้อผิดพลาด ในทำนองเดียวกันคนรักษาความปลอดภัยจะไม่แก้ไขข้อบกพร่อง Javascript เพื่อดูวิธีการรักษาความปลอดภัย
เหตุผลข้อที่ 3 คือประสิทธิภาพ ตรรกะทางธุรกิจอาจมีความต้องการทรัพยากรเซิร์ฟเวอร์และฐานข้อมูล เมื่อแยกตรรกะดังกล่าวออกจากองค์ประกอบ UI ของคุณคุณสามารถขยายส่วนของแอปพลิเคชันของคุณออกไปทำให้ง่ายขึ้นในการแก้ไขปัญหาคอขวด นอกจากนี้มันง่ายกว่ามากที่จะแยกกระบวนการทางธุรกิจที่กำลังโหลดระบบหรือฐานข้อมูลของคุณแบ็กเอนด์หากกระบวนการทางธุรกิจจะดำเนินการบนเซิร์ฟเวอร์
ข้อสรุปที่นี่คือบ่อยครั้งที่กระบวนการทางธุรกิจหลายอย่างจะใช้ข้อมูลเดียวกันดังนั้นคุณสามารถใช้การแคชบนฝั่งเซิร์ฟเวอร์เพื่อลดภาระของระบบโดยรวมที่อาจไม่สามารถทำได้ / ปลอดภัยเพื่อให้ลูกค้าเข้าถึงรหัสข้างได้
ในที่สุดฉันจะเสนอว่าเพื่อรักษามาตรฐานของกรด, ตรรกะทางธุรกิจไม่จำเป็นต้องอยู่บนเซิร์ฟเวอร์ ฉันจำการบำรุงรักษาผลิตภัณฑ์การเรียกเก็บเงินที่ทำงานในเว็บเบราว์เซอร์โดยมีเพียงการเชื่อมต่อฐานข้อมูลกับเซิร์ฟเวอร์ หากการเรียกเก็บเงินรายวัน (ซึ่งอาจใช้เวลาหนึ่งชั่วโมงหรือมากกว่านั้นในวันที่ดี!) ถูกขัดจังหวะโดยใช้เบราว์เซอร์ที่ถูกปิดหรือหยุดทำงานอาจใช้เวลาหลายชั่วโมงในการแยกแยะความยุ่งเหยิงที่เกิดขึ้นจากฐานข้อมูล อยู่ในสถานะไม่สอดคล้องกัน โปรดจำไว้ว่าสิ่งนี้เกี่ยวข้องกับบัตรเครดิตด้วยดังนั้นจึงต้องตรวจสอบบันทึกการเรียกเก็บเงินกับโปรเซสเซอร์ด้วย!
ตรรกะทางธุรกิจฝั่งเซิร์ฟเวอร์นั้นเป็นเรื่องเล็กน้อยเพื่อให้แน่ใจว่ามีการอัพเดท ACID เนื่องจากมีกรอบสำหรับภาษาใด ๆ ในการรักษาธุรกรรมไม่ว่าจะในระดับแอพพลิเคชันหรือฐานข้อมูล หากคุณทำสิ่งนี้ผ่านการอัปเดตหลายรายการจากเว็บไคลเอ็นต์ ... คุณกำลังจะได้รับสถานะที่ไม่สอดคล้องกันในบางจุดและอาจเป็นไปได้ที่จะมีผลต่อแอปพลิเคชันของคุณ
ในขณะที่มันอาจจะดึงดูดความคิดของบริการสงบเป็นเพียงวิธีการเข้าถึงฐานข้อมูลคุณไม่ควรตกหลุมพรางนี้เพราะมันเป็นสูตรที่ดีสำหรับภัยพิบัติ โมเดลอ็อบเจ็กต์ที่คุณเปิดเผยผ่านเซอร์วิส RESTful สามารถเกี่ยวข้องกับฐานข้อมูลของคุณ แต่ควรสรุปในเชิงตรรกะทางธุรกิจของคุณแทนการใช้เป็นเครื่องมือ CRUD