Kiến trúc ứng dụng frontend cho doanh nghiệp
(medium.com)-
Codebase càng lớn = càng khó hiểu và cũng càng khó sửa đổi
-
Cách giải quyết là gì? Giữ codebase ở quy mô nhỏ.
-
Tách codebase theo từng domain & micro frontend to rescue!
-
Nhu cầu như thiết lập quan hệ phụ thuộc giữa các thư viện trong monorepo & kiểm tra dependency được giải quyết bằng cách áp dụng Nx
-
Tách mã thành application và library
-
Application đảm nhiệm vai trò inject dependency và cấu hình
-
Phần lớn tính năng được triển khai trong library
- Trong library không chỉ có design system dùng chung, quốc tế hóa, module bên thứ ba mà còn cả những đoạn mã không tái sử dụng như hero banner của trang chủ, trang chi tiết sản phẩm, lịch sử đơn hàng, v.v.
Library Feature
-
Về cơ bản, mọi component được dùng trong một trang sẽ được viết trong library Feature cùng tên
- ví dụ) Mọi component của trang
SignInPagetrong domainaccountsẽ được viết trong libraryaccount/feature-sign-in
- ví dụ) Mọi component của trang
-
Component được chia sẻ giữa từ hai trang trở lên trong cùng một domain sẽ được tách thành một feature riêng trong domain đó
- ví dụ) Nếu component
KakaoLoginButtonđược dùng chung ởSignInPagevàSignUpPagecủa domainaccount, thì component đó sẽ được viết trong libraryaccount/feature-social-login
- ví dụ) Nếu component
-
Component được chia sẻ giữa các trang thuộc những domain khác nhau sẽ được tách thành một feature riêng trong domain dùng chung
- ví dụ) Component
GlobalNavigationđược chia sẻ giữaHomePagecủa domainlandingvàLecturePagecủa domainclassroomsẽ được viết trong libraryshared/feature-navigation
- ví dụ) Component
Library Shell
-
Kết hợp các component của library Feature và UI để tạo thành các trang
- ví dụ) Component
SignInPagelà component của library account/shell-kr-web. Trong đó còn cóSignUpPage,PhoneVerificationPage, v.v.
- ví dụ) Component
-
Library Shell là điểm vào của một domain cụ thể được cung cấp cho application
-
Có thể cung cấp các điểm vào khác nhau cho từng application
-
Ví dụ..
-
Các component được dùng trong component
HomePageđược viết trong librarylanding/feature-home. -
Nhưng dù cùng là
HomePage, cấu hình sẽ khác nhau tùy đó làHomePagecủa site Mỹ, site Nhật hay site Hàn Quốc. -
Vì vậy có thể tạo các library
shellcho từng application truy cập vào domainlanding. (shell-us-web,shell-jp-web,shell-kr-web)
-
Library Provider
-
Library quản lý trạng thái được chia sẻ giữa từ hai library Feature trở lên
- ví dụ)
shared/provider-auth-statequản lý trạng thái đăng nhập
- ví dụ)
Library UI
- Tập hợp các component trình bày được chia sẻ giữa từ hai library trở lên.
Library Utility
-
Mọi module không thuộc 4 nhóm ở trên
-
Cần cung cấp các chức năng đủ độc lập để có thể kiểm thử và triển khai mà không liên quan tới domain model của Class101.
- ví dụ)
shared/utils-apollo-client,shared/utils-i18n
- ví dụ)
Application
- Chỉ còn đảm nhiệm vai trò quản lý cấu hình và dependency = gần như không có mã ở application
Chưa có bình luận nào.