Bài viết này nhận được sự hỗ trợ nhiệt tình từ những người bạn thân mến của chúng tôi tại Storyblok, một CMS không giao diện thân thiện với trình chỉnh sửa trực quan, các thành phần lồng nhau và các khối nội dung có thể tùy chỉnh cho các trang web và ứng dụng. Cảm ơn bạn!

Khả năng kết hợp không chỉ là xây dựng một hệ thống thiết kế. Chúng ta nên tạo và quản lý các thành phần có thể tái sử dụng ở giao diện người dùng và UX của trang web, cũng như phối hợp với giao diện người dùng và nội dung.
Trong bài viết này, chúng ta sẽ thảo luận về cách thực hiện cả phía máy chủ và phía máy khách của các dự án và cách căn chỉnh với nội dung mà chúng ta sẽ quản lý. Chúng ta cũng sẽ so sánh cách triển khai logic có thể cấu hình vào mã của mình bằng các phương pháp khác nhau do các khuôn khổ dựa trên React như Remix và Next.js cung cấp.
Khả năng cấu hình là nghệ thuật xây dựng hệ thống theo cách mô-đun và linh hoạt. Nó nhấn mạnh vào việc tạo ra các thành phần không chỉ có thể tái sử dụng mà còn có thể kết hợp liền mạch với nhau, tạo thành một kiến trúc gắn kết và thích ứng. Cách tiếp cận này không chỉ nâng cao quy trình phát triển mà còn thúc đẩy tính nhất quán và khả năng mở rộng trên khắp các dự án.

Chúng tôi định nghĩa "kiến trúc có thể kết hợp" là ý tưởng xây dựng các hệ thống phần mềm từ các thành phần nhỏ, độc lập mà bạn có thể kết hợp để tạo thành một hệ thống hoàn chỉnh. Hãy nghĩ về một hệ thống như một tập hợp các mảnh ghép LEGO. Khi ghép chúng lại với nhau, bạn có thể xây dựng các cấu trúc, hình tượng và các sáng tạo khác thú vị. Nhưng điều thú vị về những khối đó là bạn có thể trao đổi chúng, tái sử dụng chúng cho các sáng tạo khác và thêm các mảnh ghép mới vào các mô hình hiện có của bạn.
Khi chúng ta nói về các thành phần mô-đun, chúng ta đang đề cập đến các đơn vị như:
Một trong những ý tưởng chính của cách tiếp cận MACH là để các nhà tiếp thị, nhà thiết kế và nhà phát triển front-end làm việc của họ mà không phải lo lắng về back-end trong quá trình này. Họ có thể điều chỉnh giao diện và cảm nhận ngay lập tức, chạy thử nghiệm và thích ứng với những gì khách hàng muốn mà không làm chậm toàn bộ hoạt động.
Với kiến trúc MACH, việc đạt được MVP (sản phẩm khả thi tối thiểu) giống như một chuyến đi bằng tên lửa. Các nhà phát triển có thể tạo ra các nguyên mẫu nhanh chóng và các doanh nghiệp có thể thử nghiệm các ý tưởng lớn của mình trước khi triển khai toàn diện.

MACH cũng giúp giải quyết hiệu suất web kém, bằng cách sử dụng các dịch vụ và công cụ được cải tiến áp dụng cụ thể cho từng thành phần khác nhau trong hệ sinh thái của tổ chức bạn. Ví dụ, trong trò chơi thương mại điện tử, thời gian là tiền bạc — những trang web kiểu cũ sử dụng nền tảng độc khối sẽ mất doanh số vào tay các trang web nhanh chóng và linh hoạt được xây dựng theo phương pháp có thể cấu hình. MACH cho phép bạn tạo thiết lập CNTT tùy chỉnh bằng công nghệ mới nhất hiện nay.
Kiến trúc dựa trên thành phần của React đơn giản hóa quy trình phát triển bằng cách cho phép các nhà phát triển tập trung vào việc xây dựng các đơn vị chức năng nhỏ, độc lập. Sau đó, các thành phần này có thể được kết hợp để tạo ra các tính năng phức tạp hơn và xây dựng các thành phần "cấp cao hơn" mới. Khả năng tái sử dụng của các thành phần React là một lợi ích chính, vì nó thúc đẩy cơ sở mã hiệu quả và dễ bảo trì hơn. Với ý tưởng này, chúng ta có thể xây dựng hệ thống thiết kế cho các dự án của mình, cũng như áp dụng các phương pháp như Nguyên lý thiết kế nguyên tử.
Next.js, một khuôn khổ dựa trên React, bao gồm React Server Components làm phương pháp tiếp cận mặc định khi tạo và quản lý các thành phần trên một dự án, kể từ phiên bản 13. Một số lợi ích được xác định khi sử dụng React Server Components là:
Kent C. Dodds, một thành viên rất có giá trị của cộng đồng phát triển, đã giới thiệu khái niệm Full Stack Các thành phần để mô tả cách mà khuôn khổ Remix cho phép các nhà phát triển tạo các thành phần, đóng gói việc truy xuất và xử lý dữ liệu mà họ yêu cầu và liên quan, trong một tệp hoặc mô-đun duy nhất quản lý cả logic phía máy khách và phía máy chủ.
Với sự trợ giúp của các hàm Loader và Hành động, ngoài Tuyến đường tài nguyên, Remix cho phép các nhà phát triển thêm logic phía máy chủ, như truy xuất hoặc đột biến dữ liệu, trên cùng một tệp mà chúng tôi xác định biểu diễn trực quan của thành phần.

Ưu điểm của Storyblok, khi nói về khả năng kết hợp, là phương pháp tiếp cận thành phần mà nó sử dụng để quản lý các cấu trúc nội dung. Do bản chất Không có giao diện, Storyblok cho phép bạn sử dụng các thành phần đã tạo (hoặc "khối", theo cách gọi trên nền tảng) với bất kỳ công nghệ hoặc khuôn khổ nào. Liên kết đến chủ đề trước, bạn có thể tạo các cấu trúc thành phần để quản lý nội dung trong Storyblok trong khi quản lý biểu diễn trực quan của chúng bằng các thành phần React ở phía máy khách (hoặc phía máy chủ) của ứng dụng của bạn.
Khả năng kết hợp không chỉ là xây dựng một hệ thống thiết kế. Chúng ta nên tạo và quản lý các thành phần có thể tái sử dụng ở giao diện người dùng và UX của trang web, cũng như phối hợp với giao diện người dùng và nội dung.
Trong bài viết này, chúng ta sẽ thảo luận về cách thực hiện cả phía máy chủ và phía máy khách của các dự án và cách căn chỉnh với nội dung mà chúng ta sẽ quản lý. Chúng ta cũng sẽ so sánh cách triển khai logic có thể cấu hình vào mã của mình bằng các phương pháp khác nhau do các khuôn khổ dựa trên React như Remix và Next.js cung cấp.
Kiến trúc có thể cấu hình
Trong bối cảnh năng động của phát triển web, khái niệm khả năng cấu hình đã nổi lên như một yếu tố chính trong việc tạo ra các hệ thống có khả năng mở rộng, có thể bảo trì và hiệu quả. Nó không chỉ đơn thuần là xây dựng các hệ thống thiết kế; mà còn bao gồm việc tạo và quản lý các thành phần có thể tái sử dụng trên toàn bộ quang phổ phát triển web, từ UX giao diện người dùng đến điều phối và quản lý nội dung ở giao diện người dùng.Khả năng cấu hình là nghệ thuật xây dựng hệ thống theo cách mô-đun và linh hoạt. Nó nhấn mạnh vào việc tạo ra các thành phần không chỉ có thể tái sử dụng mà còn có thể kết hợp liền mạch với nhau, tạo thành một kiến trúc gắn kết và thích ứng. Cách tiếp cận này không chỉ nâng cao quy trình phát triển mà còn thúc đẩy tính nhất quán và khả năng mở rộng trên khắp các dự án.

Chúng tôi định nghĩa "kiến trúc có thể kết hợp" là ý tưởng xây dựng các hệ thống phần mềm từ các thành phần nhỏ, độc lập mà bạn có thể kết hợp để tạo thành một hệ thống hoàn chỉnh. Hãy nghĩ về một hệ thống như một tập hợp các mảnh ghép LEGO. Khi ghép chúng lại với nhau, bạn có thể xây dựng các cấu trúc, hình tượng và các sáng tạo khác thú vị. Nhưng điều thú vị về những khối đó là bạn có thể trao đổi chúng, tái sử dụng chúng cho các sáng tạo khác và thêm các mảnh ghép mới vào các mô hình hiện có của bạn.
Các bộ phận của kiến trúc có thể cấu hình
Để quản lý kiến trúc có thể cấu hình cho các dự án của mình, chúng ta phải kết nối hai bộ phận:Các thành phần mô-đun
Chia nhỏ hệ thống thành các mô-đun hoặc thành phần độc lập, khép kín. Các thành phần mô-đun có thể được phát triển, thử nghiệm và cập nhật độc lập, thúc đẩy khả năng tái sử dụng và bảo trì dễ dàng hơn.Khi chúng ta nói về các thành phần mô-đun, chúng ta đang đề cập đến các đơn vị như:
- Microservices
Phong cách kiến trúc để phát triển các ứng dụng phần mềm như một tập hợp các dịch vụ nhỏ, độc lập giao tiếp với nhau thông qua các API được xác định rõ ràng. Ứng dụng được chia thành một tập hợp các dịch vụ được kết hợp lỏng lẻo và có thể triển khai độc lập, mỗi dịch vụ chịu trách nhiệm cho một khả năng kinh doanh cụ thể. - Ứng dụng không đầu
Trong kiến trúc không đầu, logic và chức năng của ứng dụng được tách khỏi lớp trình bày, cho phép ứng dụng hoạt động độc lập với một giao diện người dùng cụ thể. - Năng lực kinh doanh đóng gói (PBC)
Một tập hợp các hoạt động, sản phẩm và dịch vụ được đóng gói lại với nhau và được cung cấp dưới dạng một giải pháp hoàn chỉnh. Đây là một khái niệm rất phổ biến trong môi trường thương mại điện tử.
API
Vì các thành phần trong kiến trúc của chúng ta có thể quản lý các loại dữ liệu, quy trình và tác vụ khác nhau có bản chất khác nhau nên chúng cần một ngôn ngữ chung để giao tiếp giữa chúng. Các thành phần phải đưa ra các API (Giao diện lập trình ứng dụng) nhất quán và được ghi chép đầy đủ. API là một tập hợp các quy tắc và giao thức cho phép một ứng dụng phần mềm tương tác với ứng dụng khác. API xác định các phương thức và định dạng dữ liệu mà các ứng dụng có thể sử dụng để giao tiếp với nhau.Lợi ích của kiến trúc có thể cấu hình
Khi áp dụng phương pháp có thể cấu hình vào kiến trúc của các dự án, chúng ta sẽ thấy một số lợi ích và ưu điểm:- Dễ tái sử dụng.
Các thành phần được thiết kế theo dạng mô-đun và độc lập. Điều này giúp dễ dàng tái sử dụng chúng ở các phần khác nhau của hệ thống hoặc các hệ thống hoàn toàn khác nhau. Khả năng tái sử dụng có thể giảm đáng kể thời gian và công sức phát triển, cũng như cải thiện tính nhất quán giữa các dự án khác nhau. - Dễ mở rộng quy mô.
Khi nhu cầu về một dịch vụ hoặc chức năng cụ thể tăng lên, bạn có thể mở rộng quy mô hệ thống bằng cách thêm nhiều phiên bản của các thành phần có liên quan mà không ảnh hưởng đến toàn bộ kiến trúc. Khả năng mở rộng quy mô này rất cần thiết để xử lý khối lượng công việc ngày càng tăng và thích ứng với các yêu cầu kinh doanh thay đổi. - Dễ bảo trì.
Mỗi thành phần đều độc lập. Nếu cần cập nhật hoặc sửa một tính năng cụ thể, bạn có thể thực hiện mà không ảnh hưởng đến toàn bộ hệ thống. Tính mô-đun này giúp dễ dàng xác định, cô lập và giải quyết các vấn đề, giảm tác động của các hoạt động bảo trì lên toàn bộ hệ thống. - Độc lập với nhà cung cấp.
Điều này làm giảm sự phụ thuộc vào các nhà cung cấp cụ thể đối với các thành phần, giúp dễ dàng chuyển đổi hoặc nâng cấp từng bộ phận mà không làm gián đoạn toàn bộ hệ thống. - Phát triển và lặp lại nhanh hơn.
Các nhóm phát triển có thể làm việc trên các thành phần khác nhau đồng thời. Sự phát triển song song này đẩy nhanh quá trình phát triển tổng thể. Ngoài ra, các bản cập nhật và cải tiến có thể được triển khai độc lập.
Kiến trúc MACH
Một ví dụ về khả năng kết hợp là cái được gọi là kiến trúc MACH. Từ viết tắt MACH được chia thành Microservices, API-first, Cloud-native và Headless. Cách tiếp cận này tập trung vào việc áp dụng khả năng kết hợp theo cách cho phép bạn định hình toàn bộ hệ sinh thái của các dự án và tổ chức của mình để phù hợp với nhu cầu kinh doanh.Một trong những ý tưởng chính của cách tiếp cận MACH là để các nhà tiếp thị, nhà thiết kế và nhà phát triển front-end làm việc của họ mà không phải lo lắng về back-end trong quá trình này. Họ có thể điều chỉnh giao diện và cảm nhận ngay lập tức, chạy thử nghiệm và thích ứng với những gì khách hàng muốn mà không làm chậm toàn bộ hoạt động.
Với kiến trúc MACH, việc đạt được MVP (sản phẩm khả thi tối thiểu) giống như một chuyến đi bằng tên lửa. Các nhà phát triển có thể tạo ra các nguyên mẫu nhanh chóng và các doanh nghiệp có thể thử nghiệm các ý tưởng lớn của mình trước khi triển khai toàn diện.

MACH cũng giúp giải quyết hiệu suất web kém, bằng cách sử dụng các dịch vụ và công cụ được cải tiến áp dụng cụ thể cho từng thành phần khác nhau trong hệ sinh thái của tổ chức bạn. Ví dụ, trong trò chơi thương mại điện tử, thời gian là tiền bạc — những trang web kiểu cũ sử dụng nền tảng độc khối sẽ mất doanh số vào tay các trang web nhanh chóng và linh hoạt được xây dựng theo phương pháp có thể cấu hình. MACH cho phép bạn tạo thiết lập CNTT tùy chỉnh bằng công nghệ mới nhất hiện nay.
Khả năng kết hợp với React
Chúng ta có thể đào sâu hơn và chuyển cùng một khái niệm khả năng kết hợp sang việc triển khai giao diện người dùng và trải nghiệm của ứng dụng. React khuyến khích các nhà phát triển chia nhỏ giao diện người dùng thành các thành phần nhỏ, có thể tái sử dụng, có thể kết hợp lại với nhau để tạo ra các giao diện người dùng phức tạp. Mỗi thành phần React được thiết kế để đóng gói một phần chức năng hoặc thành phần giao diện người dùng cụ thể, thúc đẩy kiến trúc mô-đun và có thể kết hợp. Cách tiếp cận này tạo điều kiện cho việc tái sử dụng mã, vì các thành phần có thể dễ dàng được chia sẻ và tích hợp vào nhiều phần khác nhau của ứng dụng.Kiến trúc dựa trên thành phần của React đơn giản hóa quy trình phát triển bằng cách cho phép các nhà phát triển tập trung vào việc xây dựng các đơn vị chức năng nhỏ, độc lập. Sau đó, các thành phần này có thể được kết hợp để tạo ra các tính năng phức tạp hơn và xây dựng các thành phần "cấp cao hơn" mới. Khả năng tái sử dụng của các thành phần React là một lợi ích chính, vì nó thúc đẩy cơ sở mã hiệu quả và dễ bảo trì hơn. Với ý tưởng này, chúng ta có thể xây dựng hệ thống thiết kế cho các dự án của mình, cũng như áp dụng các phương pháp như Nguyên lý thiết kế nguyên tử.
Chuyển sang Full Stack
Nhưng chúng ta có thể tiến xa hơn nữa và áp dụng phương pháp tiếp cận có thể cấu hình vào logic phía máy chủ và phía backend của mình. Các khuôn khổ dựa trên React, chẳng hạn như Remix và Next.js, cung cấp các công cụ mạnh mẽ để triển khai khả năng cấu hình trong các ứng dụng web trong khi tận dụng tối đa các phương pháp kết xuất khác nhau, chẳng hạn như kết xuất phía máy chủ và tạo tĩnh. Hãy cùng xem một số khái niệm được áp dụng trong cả Next.js và Remix có thể giúp chúng ta triển khai logic máy chủ trong khi vẫn giữ được khả năng cấu hình của mã.Khả năng cấu hình toàn ngăn xếp với Next.js: Các thành phần máy chủ React
Các thành phần máy chủ React được nhóm React giới thiệu để giải quyết các thách thức liên quan đến nội dung được kết xuất trên máy chủ và tăng cường khả năng cấu hình của các ứng dụng React. Khả năng kết hợp, trong bối cảnh của React Server Components, đề cập đến khả năng chia nhỏ giao diện người dùng thành các đơn vị nhỏ hơn, có thể tái sử dụng và có thể được quản lý hiệu quả ở phía máy chủ. React Server Components đưa ý tưởng về khả năng kết hợp tiến thêm một bước nữa bằng cách cho phép một số thành phần nhất định được hiển thị và xử lý trên máy chủ thay vì máy khách. Điều này đặc biệt hữu ích cho các ứng dụng quy mô lớn, trong đó việc hiển thị mọi thứ ở phía máy khách có thể dẫn đến tình trạng tắc nghẽn hiệu suất.Next.js, một khuôn khổ dựa trên React, bao gồm React Server Components làm phương pháp tiếp cận mặc định khi tạo và quản lý các thành phần trên một dự án, kể từ phiên bản 13. Một số lợi ích được xác định khi sử dụng React Server Components là:
- Di chuyển các hoạt động truy xuất dữ liệu đến máy chủ, gần nguồn dữ liệu hơn. Điều này cũng làm giảm số lượng yêu cầu mà máy khách cần thực hiện khi sử dụng sức mạnh xử lý mà máy chủ web cung cấp, so với khả năng xử lý của thiết bị máy khách.
- Bảo mật tốt hơn khi quản lý và hiển thị nội dung.
- Chiến lược lưu trữ đệm tốt hơn.
- Cải thiện Tải trang ban đầu và Vẽ nội dung đầu tiên (FCP).
- Giảm kích thước gói.
Khả năng kết hợp toàn bộ ngăn xếp với Remix: Thành phần toàn bộ ngăn xếp
Một trong những nguyên tắc chính của Remix là khả năng tạo các thành phần tuyến có thể kết hợp, cho phép các nhà phát triển xây dựng giao diện người dùng phức tạp bằng cách kết hợp các phần nhỏ hơn, độc lập.Kent C. Dodds, một thành viên rất có giá trị của cộng đồng phát triển, đã giới thiệu khái niệm Full Stack Các thành phần để mô tả cách mà khuôn khổ Remix cho phép các nhà phát triển tạo các thành phần, đóng gói việc truy xuất và xử lý dữ liệu mà họ yêu cầu và liên quan, trong một tệp hoặc mô-đun duy nhất quản lý cả logic phía máy khách và phía máy chủ.
Với sự trợ giúp của các hàm Loader và Hành động, ngoài Tuyến đường tài nguyên, Remix cho phép các nhà phát triển thêm logic phía máy chủ, như truy xuất hoặc đột biến dữ liệu, trên cùng một tệp mà chúng tôi xác định biểu diễn trực quan của thành phần.
Căn chỉnh với nội dung
Cuối cùng, một một trong những thách thức trong phát triển web là căn chỉnh khả năng kết hợp của lớp kiến trúc và trình bày của chúng ta với nội dung mà chúng quản lý. Một hệ thống kết hợp được thiết kế tốt không chỉ nên xem xét các khía cạnh kỹ thuật mà còn phải tính đến bản chất của nội dung mà nó xử lý. Để giúp chúng ta làm điều đó, chúng ta có thể sử dụng hệ thống Quản lý nội dung không đầu như Storyblok.Storyblok: CMS không đầu với phương pháp kết hợp
Storyblok là Hệ thống quản lý nội dung không đầu với nhiều tính năng và khả năng giúp biên tập viên nội dung, nhà tiếp thị và những loại người dùng khác tạo và quản lý nội dung một cách hiệu quả. Nội dung được tạo bằng Storyblok (hoặc bất kỳ CMS không đầu nào) có thể được trình bày theo bất kỳ cách nào, vì các nền tảng này không buộc các nhà phát triển phải sử dụng logic lớp trình bày cụ thể nào.
Ưu điểm của Storyblok, khi nói về khả năng kết hợp, là phương pháp tiếp cận thành phần mà nó sử dụng để quản lý các cấu trúc nội dung. Do bản chất Không có giao diện, Storyblok cho phép bạn sử dụng các thành phần đã tạo (hoặc "khối", theo cách gọi trên nền tảng) với bất kỳ công nghệ hoặc khuôn khổ nào. Liên kết đến chủ đề trước, bạn có thể tạo các cấu trúc thành phần để quản lý nội dung trong Storyblok trong khi quản lý biểu diễn trực quan của chúng bằng các thành phần React ở phía máy khách (hoặc phía máy chủ) của ứng dụng của bạn.