การเขียนแอป Angular 2 ขนาดใหญ่พร้อมแอปขนาดเล็กหลายรายการ


17

หลังจากการอภิปรายและการวิจัยนาน 3 เดือนในการเลือกระหว่าง React (กับ Redux) และ Angular 2 ทีม front-end ใน บริษัท ของฉันได้สรุปว่าจะไปกับ Angular 2 (เนื่องจากมันเหมาะสมกับปัญหาของเรามากขึ้น)

เราเข้าสู่ธุรกิจแอพระดับองค์กรซึ่งปัจจุบันประกอบด้วยเทคโนโลยี Front-End ที่แตกต่างกันมากมาย (ในขณะที่มีแบ็กเอนด์ RESTful ทั้งหมด) และเราต้องการแทนที่ทั้งหมดและมีเทคโนโลยีเดียวที่จะทำให้การฝึกอบรมและการควบคุมคุณภาพในอนาคตง่ายขึ้น

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

ตัวอย่าง;

เรียกผลิตภัณฑ์ของฉันเป็น SuperApp

ในฐานะที่เป็น UI นั้น SuperApp มีระบบเข้าสู่ระบบมาตรฐานและการนำทางไปยังโมดูลย่อย / ผลิตภัณฑ์ย่อยเช่นเวิร์กโฟลว์ปรากฏดังต่อไปนี้

  • SuperApp

    • ตรวจสอบผู้ใช้
    • ลืมรหัสผ่านของวิซาร์ด
    • เข้าถึงหน้าสาธารณะโดยไม่ต้องตรวจสอบสิทธิ์
    • ผู้ใช้รับรองความถูกต้อง

      • ระบบนำทาง

        • บ้าน
          • Sub-Product1
          • Sub-Product2
          • Sub-Product3
        • ข้อมูลส่วนตัว

          ...

          ...

        • กลุ่ม

          ...

          ...

โปรดทราบว่าในการแสดงข้างต้นSub-product1และSub-product2เป็นสองพื้นที่ที่แตกต่างกันโดยสิ้นเชิงมีโดเมนธุรกิจที่แตกต่างกันโดยสิ้นเชิง

สิ่งที่ฉันคิดได้ในตอนนี้คือฉันสามารถสร้างSuperAppเป็นโครงการ Angular 2 เดียวที่มีเฉพาะส่วนประกอบและมุมมองที่เกี่ยวข้องกับตัวเองเท่านั้นและ SuperApp ยังรับผิดชอบการโหลดแอปลูกหลายรายการ Sub-product1, Sub-product2(อีกครั้ง, โครงการ Angular 2 ที่แตกต่างกัน, มีของตัวเองpackage.json, ตั้งค่าwebpack, ฯลฯ ) ผ่านคอมโพเนนต์ที่โง่เง่าและทำหน้าที่เป็นเชลล์ซึ่งมีการจัดเส้นทางระดับสูงสุดและตัวยึดตำแหน่งเพื่อเก็บแอปลูกเหล่านั้น

เมื่อSub-product1โหลดภายในเชลล์แล้วมันจะต่อท้ายเส้นทางของตัวเองไปยังเส้นทางปัจจุบันที่ SuperApp ลงจอด

เหตุผลที่ฉันต้องการแยกเพราะแอพต่าง ๆ เหล่านี้ (ซึ่งปัจจุบันสร้างขึ้นโดยใช้ ExtJS) มีทีมงานที่ทุ่มเท (เราเป็น บริษัท ที่มีนักพัฒนา 500+) ดังนั้นหากพวกเขามีโครงการแองกูลาร์ของตนเองพวกเขาสามารถจัดการเครื่องมือของพวกเขา และขึ้นอยู่กับความชอบของพวกเขาโดยไม่ต้องพึ่งพาแอปผู้ปกครองที่ยิ่งใหญ่

แต่ฉันไม่พบที่ใดก็ได้ในเอกสารเชิงมุมอย่างเป็นทางการหรือบนเว็บว่ามีแอพเชิงมุมซ้อนกันอยู่หรือไม่ (ในลักษณะที่รหัสเฟรมเวิร์กนั้นถูกแชร์ในขณะที่การพึ่งพาแอพย่อยของเด็ก ๆ ต้องการ) หรือไม่ว่ามีวิธีอื่นใดในการแก้ปัญหาดังกล่าว

คำแนะนำใด ๆ หรือแม้กระทั่งการเชื่อมโยงไปยังบทความที่เกี่ยวข้องจะได้รับการชื่นชม


คุณพบวิธีแก้ปัญหาสำหรับสิ่งนี้หรือไม่?
Dhaval Marthak

@DhavalMarthak ยังไม่เปิดฉันยังคงความคิด
Kushal

@Kushal คุณได้รับการแก้ไขปัญหานี้หรือไม่? ฉันมีความต้องการแบบเดียวกัน
Keerthivasan

@Keerthivasan ยังไม่ได้รับอะไรเลยแม้ว่าจะเป็นทางเลือกที่ดีในการสร้างแพคเกจส่วนกลางที่ใช้ร่วมกันแล้วทำไมโครแอพภายในหน้าเว็บทุกที่ แต่สิ่งนี้จะทำงานได้อย่างกลมกลืนหากทีม dev ส่วนหน้าของ บริษัท ถูกเก็บไว้ ซิงค์. ดังนั้นหากผลิตภัณฑ์ของคุณมีขนาดใหญ่มากนี่เป็นการตัดสินใจทางการเมืองมากกว่าทางเลือกสถาปัตยกรรม
Kushal

1
มีการพูดถึงการทำลายเสาหินหน้าใน microxchg 2018 ที่พูดถึงวิธีการบางอย่าง อาจจะมีสิ่งที่มีประโยชน์ ดูyoutube.com/watch?v=rCxj-ONZmxsและyoutube.com/watch?v=7MHsPfoonqs
sapientpants

คำตอบ:


1

สิ่งที่คุณกำลังอธิบายฉันรู้โดยโมดูล therm ดังนั้นฉันจะอ้างถึงเป็นเช่นนี้

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

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

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


1

ทางเลือกหนึ่ง: คุณสามารถ "ฮาร์ดลิงก์" (แทนที่จะใช้ลิงก์ SPA) ไปยังแอพย่อยและให้แอพย่อยแต่ละแอพแบ่งปันการพึ่งพาสำหรับ wrapper ของไซต์

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