Soạn ứng dụng Angular 2 lớn với nhiều ứng dụng nhỏ trong


17

Sau 3 tháng tranh luận và nghiên cứu trong việc lựa chọn giữa React (với Redux) và Angular 2, nhóm front-end trong công ty của tôi đã kết luận sẽ đi với Angular 2 (cho rằng nó phù hợp hơn với vấn đề của chúng tôi).

Chúng tôi đang kinh doanh ứng dụng doanh nghiệp, hiện đang bao gồm nhiều công nghệ mặt trước khác nhau (trong khi có toàn bộ RESTful phụ trợ) và chúng tôi muốn thay thế tất cả và có một công nghệ duy nhất để giúp đào tạo và kiểm soát chất lượng trong tương lai dễ dàng hơn.

Với bản chất của sản phẩm của chúng tôi, nó rất rộng lớn và có các mô-đun bên trong, bản thân nó là một miền khác nhau và có thể được tạo thành một ứng dụng độc lập nhưng bản thân sản phẩm chỉ tồn tại trong một URL.

Thí dụ;

Hãy gọi sản phẩm của tôi là SuperApp.

Là một giao diện người dùng, SuperApp có hệ thống đăng nhập tiêu chuẩn và điều hướng đến các mô đun con / sản phẩm con, sao cho quy trình làm việc xuất hiện như sau.

  • Siêu ứng dụng

    • Xác thực người dùng
    • Quên mật khẩu
    • Trang công khai có thể truy cập mà không cần xác thực
    • Người dùng đã được chứng thực

      • Hệ thống định vị

        • Trang Chủ
          • Sản phẩm phụ1
          • Sản phẩm phụ2
          • Sản phẩm phụ3
        • Hồ sơ

          ...

          ...

        • Các nhóm

          ...

          ...

Lưu ý rằng trong đại diện ở trên, Sub-product1Sub-product2là hai lĩnh vực hoàn toàn khác nhau, có các lĩnh vực kinh doanh hoàn toàn khác nhau.

Điều tôi có thể nghĩ ngay bây giờ là tôi có thể tạo SuperApp như một dự án Angular 2 duy nhất chỉ có các thành phần và chế độ xem phù hợp với chính nó và SuperApp cũng chịu trách nhiệm tải lên nhiều ứng dụng con; Sub-product1, Sub-product2(một lần nữa, các dự án Angular 2 khác nhau, có cấu hình riêng package.json, webpackcấu hình, v.v.) thông qua các thành phần câm và hoạt động như một vỏ cung cấp định tuyến cấp cao nhất và giữ chỗ để giữ các ứng dụng con đó.

Khi Sub-product1được tải trong hệ vỏ, nó sẽ nối các tuyến riêng của nó với tuyến hiện tại mà SuperApp đã hạ cánh.

Lý do tôi muốn tách biệt là vì các ứng dụng khác nhau (hiện đang được xây dựng bằng ExtJS) có các nhóm chuyên dụng làm việc với nó (chúng tôi là một công ty có hơn 500 nhà phát triển), vì vậy nếu họ có các dự án Angular của riêng mình, họ có thể quản lý công cụ của họ và phụ thuộc vào ý thích của họ mà không cần dựa vào ứng dụng cha mẹ lớn.

Nhưng tôi không thể tìm thấy bất cứ nơi nào trong các tài liệu Angular chính thức hoặc trên web rằng liệu có ứng dụng Angular lồng nhau hay không (theo cách mà mã khung được chia sẻ trong khi các phụ thuộc của ứng dụng con hoàn toàn bị cô lập và chỉ được tải khi ứng dụng cần nó), hoặc liệu có cách tiếp cận thay thế nào để giải quyết vấn đề như vậy không.

Bất kỳ hướng dẫn hoặc thậm chí liên kết đến bất kỳ bài viết có liên quan sẽ được đánh giá cao.


Bạn đã tìm thấy bất kỳ giải pháp cho điều này?
Dhaval Marthak

@DhavalMarthak Chưa, tôi vẫn mở ý tưởng.
Kushal

@Kushal Bạn có nhận được giải pháp nào cho việc này không? Tôi có cùng loại yêu cầu
Keerthivasan

@Keerthivasan Chưa có gì, mặc dù một giải pháp thay thế tốt là tạo gói toàn cầu được chia sẻ và sau đó thực hiện các ứng dụng vi mô trong trang ở mọi nơi, nhưng điều này sẽ chỉ hoạt động hài hòa nếu tất cả các nhóm phát triển trước của công ty được giữ đồng bộ hóa. Vì vậy, nếu sản phẩm của bạn thực sự lớn, đây là một quyết định chính trị nhiều hơn là một lựa chọn kiến ​​trúc.
Kushal

1
Đã có một vài cuộc nói chuyện về việc phá vỡ khối đá nguyên khối tại microxchg 2018 nói về một số cách tiếp cận. Có lẽ có một cái gì đó hữu ích ở đó. Xem youtube.com/watch?v=rCxj-ONZmxsyoutube.com/watch?v=7MHsPfoonqs
sapientpants

Câu trả lời:


1

Những gì bạn đang mô tả tôi biết bởi các mô-đun nhiệt. Vì vậy, tôi sẽ đề cập đến là như vậy.

Tôi sẽ không giải quyết câu hỏi liệu các mô-đun hỗ trợ góc có thiếu kiến ​​thức về khung hay không. Ngoài ra, theo tôi bạn không thực sự muốn điều này. Theo hiểu biết của tôi và tôi hy vọng phần phụ trợ của bạn phản ánh, bạn muốn cắt mọi thứ thành các bit nhỏ nhất bạn có thể ( dịch vụ vi mô ).

Trong trường hợp này, mỗi dấu chấm trên sơ đồ của bạn phải là ứng dụng độc lập. Họ chắc chắn phải liên lạc với nhau, theo từng trách nhiệm để soạn ra quan điểm bạn mô tả. Bạn đã thấy Google có url / công cụ / hệ thống riêng biệt để xác thực như thế nào chưa? Gmail không quan tâm đến điều đó vì đó không phải là trách nhiệm của nó. Ngay cả việc trượt băng của tất cả các công cụ là trung tâm thay vì nằm trong mỗi công cụ (bạn thấy điều này trên thiết kế vật liệu). Các tài sản sống bên ngoài mỗi dự án / hệ thống.

Làm như vậy bạn sẽ đạt được một đòn bẩy cao hơn về khả năng sử dụng lại và tính linh hoạt của hệ thống của bạn. Mặc dù trong các đội nhỏ, điều này là không thể đo lường được do sự phức tạp và thời gian. Bây giờ công việc của bạn là tìm ra trường hợp của bạn rơi vào trường hợp nào. Tất cả trong các dịch vụ vi mô và tách, tất cả trong một pkg hoặc ở đâu đó ở giữa. Và các mô-đun, nếu có, là thứ bạn sẽ sử dụng bên trong mỗi dấu chấm.


1

Một tùy chọn: bạn có thể "liên kết cứng" (thay vì sử dụng liên kết SPA) đến các ứng dụng phụ và mỗi ứng dụng phụ chia sẻ một phụ thuộc cho trình bao bọc trang web.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.