จะวางตรรกะทางธุรกิจไว้ที่ไหนถ้าใช้ Firebase


10

ฉันกำลังจะเริ่มพัฒนาเว็บแอปพลิเคชันหน้าเดียวที่ง่ายขึ้นมากสำหรับระบบเอกสารผู้ใช้หลายคน ปลายด้านหน้าอาจจะใช้ Angular2

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

ฉันต้องการแบ็กเอนด์บางอย่างเพื่อจัดเก็บข้อมูลแอปพลิเคชัน ฉันได้ดูไปรอบ ๆ และพบ Firebase ซึ่งดูเหมือนว่าจะลบงานบางส่วนของการสร้างแบ็กเอนด์แยกต่างหากและ API เพื่อสื่อสารกับส่วนหน้า

แต่นั่นก็หมายความว่าฉันจะต้องวางตรรกะทางธุรกิจไว้ในส่วนหน้าในแอปพลิเคชันเว็บ Angular2 ใช่มั้ย

ดังนั้นหากในอนาคตสักวันฉันอยากจะสร้างแอพมือถือส่วนหน้าฉันจะต้องทำซ้ำรหัสตรรกะทางธุรกิจหรือไม่

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

โดยทั่วไปแล้วคนเราจะจัดโครงสร้างแอพประเภทนี้อย่างไรหากพวกเขาต้องการใช้ประโยชน์จาก Firebase เป็นตัวอย่าง?


ฐานข้อมูลใดที่คุณคุ้นเคยมากที่สุด นั่นอาจเป็นสิ่งที่จะพาคุณไปเร็วที่สุด
Robert Harvey

สำหรับโครงการนี้ฉันอาจจะใช้เทคโนโลยีบางอย่างที่ฉันไม่ได้ใช้มาก่อนดังนั้นจะมีบางคนเรียนรู้วิธีการอย่างใดอย่างหนึ่ง ...
แมกนัส W

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

คำตอบ:


2

ถาม: แต่นั่นก็หมายความว่าฉันจะต้องวางตรรกะทางธุรกิจไว้ใน front-end ในแอปพลิเคชันเว็บ Angular2ใช่มั้ย

ใช่. หากไม่ได้รับการสนับสนุนจากเซิร์ฟเวอร์ธุรกิจควรจะถูกนำไปใช้ที่ไหนสักแห่ง

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

ดังนั้นอย่างที่คุณอาจเดาได้ว่า Firebase ไม่ได้ยกเว้นเราจากการมีแบ็กเอนด์ที่ทุ่มเทให้กับการเป็นเจ้าภาพและดำเนินงานเฉพาะด้านธุรกิจ

ถาม: ถ้าวันหนึ่งฉันอยากจะสร้างแอพมือถือในอนาคตฉันจะต้องทำซ้ำรหัสตรรกะทางธุรกิจหรือไม่

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

เรื่องนั้นก็คือการที่จะเป็นเจ้าภาพ Javascript สำหรับการจัดจำหน่ายและการกำหนดรุ่นของมัน คำCDN

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

ข้อควรพิจารณาบางประการ

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

บนมืออื่น ๆ ที่มีของเรากลับสิ้นจะเป็นประโยชน์สำหรับเหตุผลง่ายๆ, decoupling

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

ถาม: ผู้คนมักจะจัดโครงสร้างแอพประเภทนี้อย่างไรถ้าพวกเขาต้องการใช้ประโยชน์จาก Firebase เป็นตัวอย่าง?

มันแตกต่างกันอย่างมากจากโครงการไปยังโครงการ ตัวอย่างเช่นเราใช้ Firebase + back-end

  • Firebase DBการใช้ข้อมูลร่วมกันระหว่างอุปกรณ์บัญชีการประชุม เช่นเดียวกับการเปลี่ยนแปลงเมื่อแบ็กเอนด์ของเราไม่สามารถใช้งานได้ชั่วคราวลูกค้าส่งการดำเนินการเขียนไปยังบันทึกซึ่งจะถูกซิงโครไนซ์ในภายหลัง

  • Firebase Cloud Messagesให้การแจ้งเตือนและหัวข้อการส่งข้อมูลแบบ upstream / downstream เราใช้บริการสำหรับการแลกเปลี่ยนข้อความ pub / sub

  • การวิเคราะห์ Firebaseส่วนใหญ่ใช้สำหรับการวัด

  • Back-endสำหรับทุกสิ่งที่เกี่ยวข้องกับธุรกิจอย่างเคร่งครัด


1

คำตอบสั้น ๆ : อย่าใช้ตรรกะทางธุรกิจ

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

คุณอาจเริ่มต้นด้วย API ทันทีจาก Firebase และต่อมาแนะนำเลเยอร์เพิ่มเติมสำหรับตรรกะทางธุรกิจเมื่อคุณพบว่ามีความต้องการที่แท้จริงบางอย่างตราบใดที่คุณออกแบบสัญญาของคุณให้ดีพอสำหรับบริการเพื่อรักษาลายเซ็นที่มั่นคงในขณะที่ การนำไปปฏิบัติด้านหลังอาจมีการเปลี่ยนแปลง


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

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

0

ดู/programming/54994228/how-to-minimise-firebase-function-latency

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

จากนั้นใช้ฟังก์ชั่นคลาวด์ที่เรียกจากทริกเกอร์ Cloud Firestore

คุณไม่ควรเรียกใช้ฟังก์ชั่นคลาวด์จากแอพพลิเคชั่นส่วนหน้า

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