Skip to main content

Facit Enhancement

Agar project lebih maintainable, disini kita perlu sedikit adjustment untuk folder pages/presentation/*.

# Pages Folder Structure
.
└── pages
└── presentation
└── [feature name]
├── components
├── [feature name]Form.tsx
├── _core
└── [feature name]ResponseProvider.tsx
├── [feature name]-list
├── table
└── columns
├── [feature name]Columns.tsx
├── [feature name]NameCell.tsx
└── ...
├── [feature name]ListTable.tsx
└── [feature name]List.tsx
├── [feature name]-edit
├── [feature name]Edit.tsx
└── [feature name]Page.tsx

Struktur diatas adalah struktur pendukung penggunaan react-query. Karena facit belum menggunakan react-query secara langsung, kita perlu menginstall-nya terlebih dahulu.

Structure Explanation

Untuk meningkatkan performa dan maintainability, saya rasa perlu dilakukan enhancement dari sisi code dan folder structure template facit ini, dikarenakan menurut opini saya pribadi, terlalu sulit untuk mencari mana yang page list dan mana yang form, juga bagaimana mencari halaman real (component route), dan mana yang component.

Pages

Tempat kita menyimpan semua page yang tersedia/terdaftar di react-router.

Features

Kita memisahkan page berdasarkan fitur, supaya meminimalisir senggol menyenggol antara satu fitur dengan fitur lain. Perlu diperhatikan untuk penulisan nama folder, kita wajib menggunakan kebab-case atau dash-case, maka dari itu, ketika kita akan membuat nama fitur, diwajibkan untuk menggunakan case-case tersebut. e.g user-management

Dalam folder [feature-name], akan ada beberapa folder base on feature yang sedang kita kerjakan. Misal kita sedang mengerjakan feature User Management, dimana akan ada feature list, add, update dan delete. Untuk list dan delete bisa kita satukan, karena delete biasanya terdapat pada table yang ada pada list, maka dari itu kita perlu membuat 1 folder dengan nama user-management-list.

Lalu kita bisa satukan lagi add dan edit supaya form yang ada pada halaman add bisa dipergunakan kembali di halaman edit. Kita buat juga 1 folder dengan nama user-management-edit.

Last, kita buat juga [feature-name]Page.tsx sebagai wrapper route.

Components

Di dalam folder ini kita akan menyimpan component-component yang kita gunakan di feature.

Core

Berisi wrapper react-query, menggunakan Context API dan Custom Hook, yang bisa digunakan dimanapun, selama component terbungkus dalam wrapper tersebut.

Code Splitting

Enhancement yang perlu dilakukan adalah code spliting, dimana kita akan memisahkan component-component sekecil mungkin, agar component tersebut lebih bisa di maintainable, dan code yang dihasilkan bisa lebih sedikit.

Untuk penunjang code spliting ini, saya menyarankan penggunaan zustand as a state manager. Config yang sangat ringkas dan penggunaannya yang simple menjadi salah satu alasan penggunaannya, dibanding redux yang terkesan need more setup.