Arsitektur Aplikasi Frontend Enterprise
(medium.com)-
Semakin besar codebase = semakin sulit dipahami dan dimodifikasi
-
Solusinya? Jaga agar codebase tetap kecil.
-
Pisahkan codebase per domain & micro frontend to rescue!
-
Kebutuhan seperti pengaturan relasi dependensi library & pengecekan dependensi di dalam monorepo diselesaikan dengan mengadopsi Nx
-
Pisahkan kode menjadi application dan library
-
Application berperan untuk injeksi dependensi dan konfigurasi
-
Sebagian besar fungsionalitas diimplementasikan di library
- Di library tidak hanya ditulis design system, internasionalisasi, dan modul pihak ketiga yang dapat digunakan secara umum, tetapi juga kode yang tidak digunakan ulang seperti hero banner halaman utama, halaman detail produk, dan riwayat pesanan.
Library Feature
-
Pada dasarnya, semua komponen yang digunakan dalam satu halaman ditulis di library Feature dengan nama yang sama
- contoh) semua komponen untuk halaman
SignInPagepada domainaccountditulis di libraryaccount/feature-sign-in
- contoh) semua komponen untuk halaman
-
Komponen yang dibagikan oleh dua atau lebih halaman dalam domain yang sama dipisahkan menjadi feature tersendiri di dalam domain tersebut
- contoh) jika komponen
KakaoLoginButtondigunakan bersama diSignInPagedanSignUpPagepada domainaccount, maka komponen tersebut ditulis di libraryaccount/feature-social-login
- contoh) jika komponen
-
Komponen yang dibagikan oleh halaman-halaman dari domain yang berbeda dipisahkan menjadi feature tersendiri di dalam domain bersama
- contoh) komponen
GlobalNavigationyang dibagikan olehHomePagepada domainlandingdanLecturePagepada domainclassroomditulis di libraryshared/feature-navigation
- contoh) komponen
Library Shell
-
Menggabungkan komponen dari library Feature dan UI untuk membuat halaman
- contoh) komponen
SignInPageadalah komponen dari library account/shell-kr-web. Di dalamnya juga adaSignUpPage,PhoneVerificationPage, dan lain-lain.
- contoh) komponen
-
Library Shell adalah entry point untuk domain tertentu yang disediakan ke application
-
Dapat menyediakan entry point yang berbeda untuk tiap application
-
misalnya..
-
Komponen yang digunakan di
HomePageditulis di librarylanding/feature-home. -
Namun, meskipun sama-sama
HomePage, susunannya akan berbeda tergantung apakah ituHomePageuntuk situs AS, situs Jepang, atau situs Korea. -
Karena itu, bisa dibuat library
shelluntuk masing-masing application yang mengakses domainlanding. (shell-us-web,shell-jp-web,shell-kr-web)
-
Library Provider
-
Library yang mengelola state yang dibagikan oleh dua atau lebih library Feature
- contoh)
shared/provider-auth-stateyang mengelola status login
- contoh)
Library UI
- Kumpulan komponen presentational yang dibagikan oleh dua atau lebih library.
Library Utility
-
Semua modul yang tidak termasuk dalam empat kategori di atas
-
Harus menyediakan fungsi yang cukup independen sehingga dapat diuji dan dideploy tanpa terkait dengan model domain Class101.
- contoh)
shared/utils-apollo-client,shared/utils-i18n
- contoh)
Application
- Hanya bertugas menangani konfigurasi dan manajemen dependensi = hampir tidak ada kode di application
Belum ada komentar.