Struktur Folder dan Best Practices
Di lesson ini kita akan mempelajari cara mengorganisir kode di Laravel agar project tetap rapi saat semakin besar.
Mengapa Struktur Folder Penting?
Bayangkan lemari arsip rumah sakit:
Sama dengan kode - dengan struktur yang baik, Anda bisa langsung tahu "file X ada di folder Y".
Bayangkan lemari arsip rumah sakit:
| Tanpa Organisasi Semua rekam medis dicampur dalam 1 rak. Butuh 30 menit cari 1 file. |
Dengan Organisasi Ada rak Rawat Jalan, Rawat Inap, Farmasi. Butuh 30 detik cari file. |
Sama dengan kode - dengan struktur yang baik, Anda bisa langsung tahu "file X ada di folder Y".
Tipe: [TEORI - TIDAK ADA KODE]
Lesson ini adalah referensi untuk memahami organisasi kode. Anda tidak perlu membuat file di lesson ini - semua file akan dibuat secara bertahap di section-section berikutnya.
Lesson ini adalah referensi untuk memahami organisasi kode. Anda tidak perlu membuat file di lesson ini - semua file akan dibuat secara bertahap di section-section berikutnya.
Step 1: Struktur Folder Backend (app/)
Lokasi:
Tipe: [REFERENSI - TIDAK PERLU DIBUAT]
Fungsi: Berisi semua logic backend - Controllers, Models, Helpers
app/Tipe: [REFERENSI - TIDAK PERLU DIBUAT]
Fungsi: Berisi semua logic backend - Controllers, Models, Helpers
app/
├── Http/
│ ├── Controllers/
│ │ ├── Auth/ # [v] Sudah ada (Breeze)
│ │ ├── DashboardController.php # [v] Section 1
│ │ ├── Master/ # [+] Section 2: Master Data
│ │ │ ├── PoliklinikController.php
│ │ │ ├── DokterController.php
│ │ │ ├── JadwalPraktekController.php
│ │ │ └── ObatController.php
│ │ ├── PasienController.php # [+] Section 3
│ │ ├── PendaftaranController.php # [+] Section 4
│ │ ├── AntrianController.php
│ │ ├── DokterDashboardController.php # [+] Section 5
│ │ ├── FarmasiController.php # [+] Section 6
│ │ ├── KasirController.php # [+] Section 7
│ │ └── RawatInapController.php # [+] Section 8
│ │
│ └── Middleware/
│ └── RoleMiddleware.php # [v] Section 1 (Spatie)
│
├── Models/
│ ├── User.php # [v] Sudah ada
│ ├── Poliklinik.php # [+] Section 2
│ ├── Dokter.php
│ ├── JadwalPraktek.php
│ ├── Obat.php
│ ├── Pasien.php # [+] Section 3-4
│ ├── Kunjungan.php
│ ├── Antrian.php
│ ├── RekamMedis.php # [+] Section 5
│ ├── Resep.php # [+] Section 6
│ ├── Billing.php # [+] Section 7
│ └── RawatInap.php # [+] Section 8
│
└── Helpers/
└── AppHelper.php # [v] Section 1
Keterangan Simbol:
| [v] | File sudah dibuat (di section sebelumnya atau bawaan Laravel) |
| [+] | File akan dibuat di section yang disebutkan |
Step 2: Struktur Folder Views (resources/views/)
Lokasi:
Tipe: [REFERENSI - TIDAK PERLU DIBUAT]
Fungsi: Berisi semua tampilan UI - file Blade templates
resources/views/Tipe: [REFERENSI - TIDAK PERLU DIBUAT]
Fungsi: Berisi semua tampilan UI - file Blade templates
resources/views/
├── layouts/
│ └── simrs.blade.php # [v] Section 1: Master layout
│
├── dashboard.blade.php # [v] Section 1
│
├── auth/ # [v] Sudah ada (Breeze)
│ ├── login.blade.php
│ └── register.blade.php
│
├── master/ # [+] Section 2
│ ├── poliklinik/
│ │ └── index.blade.php
│ ├── dokter/
│ │ └── index.blade.php
│ ├── jadwal/
│ │ └── index.blade.php
│ └── obat/
│ └── index.blade.php
│
├── pasien/ # [+] Section 3-4
│ ├── index.blade.php
│ ├── create.blade.php
│ └── show.blade.php
│
├── pendaftaran/
│ ├── index.blade.php
│ └── create.blade.php
│
├── antrian/
│ ├── panel.blade.php # Panel pemanggilan (untuk perawat)
│ ├── display.blade.php # Display TV (untuk pasien)
│ └── kiosk.blade.php # Mesin antrian self-service
│
├── dokter/ # [+] Section 5
│ ├── dashboard.blade.php
│ ├── periksa.blade.php
│ └── rekam-medis.blade.php
│
├── farmasi/ # [+] Section 6
│ └── index.blade.php
│
├── kasir/ # [+] Section 7
│ └── index.blade.php
│
└── rawat-inap/ # [+] Section 8
├── index.blade.php
└── bed-management.blade.php
Tips Organisasi Views:
| 1 Controller = 1 Folder | PoliklinikController → views/master/poliklinik/ |
| CRUD Views | Biasanya: index, create, edit, show |
| Partial Views | Awali dengan underscore: _form.blade.php |
Step 3: Naming Convention (Aturan Penamaan)
Tipe: [TEORI - TIDAK ADA KODE]
Fungsi: Aturan penamaan yang konsisten agar kode mudah dibaca
Fungsi: Aturan penamaan yang konsisten agar kode mudah dibaca
Aturan Penamaan Laravel:
| Jenis | Format | Contoh |
|---|---|---|
| Model | PascalCase, Singular | Pasien, RekamMedis |
| Tabel Database | snake_case, Plural | pasiens, rekam_medis |
| Controller | PascalCase + Controller | PasienController |
| Migration | snake_case dengan timestamp | 2024_01_01_create_pasiens_table |
| View | kebab-case atau snake_case | rekam-medis.blade.php |
| Route Name | dot notation | pasien.index, pasien.store |
Step 4: Best Practices untuk SIMRS
Tipe: [TEORI - TIDAK ADA KODE]
Fungsi: Tips dan trik untuk membangun aplikasi yang maintainable
Fungsi: Tips dan trik untuk membangun aplikasi yang maintainable
| 1. Eager Loading |
Selalu gunakan with() untuk load relasi sekaligus.Buruk: Pasien::all() lalu loop $pasien->kunjunganBaik: Pasien::with('kunjungan')->get()
|
| 2. Form Request |
Validasi di Form Request class, bukan di controller.php artisan make:request StorePasienRequest
|
| 3. Resource Controller |
Gunakan 7 method standar: index, create, store, show, edit, update, destroyRoute::resource('pasien', PasienController::class)
|
| 4. AJAX Pattern |
Untuk SIMRS, kita pakai AJAX untuk update tanpa refresh halaman. Selalu set CSRF token di header. |
| 5. Soft Deletes |
Data medis tidak boleh dihapus permanen (regulasi). Gunakan SoftDeletes trait di model.
|
Checkpoint - Verifikasi Pemahaman
Jawab pertanyaan berikut:
1. Di mana menyimpan file Controller untuk Pasien?
Jawaban:
2. Apa nama tabel database untuk Model
Jawaban:
3. Di mana menyimpan view untuk halaman index Poliklinik?
Jawaban:
4. Apa route name untuk method store di PasienController?
Jawaban:
5. Mengapa pakai Soft Deletes untuk data medis?
Jawaban: Karena regulasi kesehatan mengharuskan data medis disimpan, tidak boleh dihapus permanen.
1. Di mana menyimpan file Controller untuk Pasien?
Jawaban:
app/Http/Controllers/PasienController.php2. Apa nama tabel database untuk Model
RekamMedis?Jawaban:
rekam_medis (snake_case, sesuai nama model)3. Di mana menyimpan view untuk halaman index Poliklinik?
Jawaban:
resources/views/master/poliklinik/index.blade.php4. Apa route name untuk method store di PasienController?
Jawaban:
pasien.store5. Mengapa pakai Soft Deletes untuk data medis?
Jawaban: Karena regulasi kesehatan mengharuskan data medis disimpan, tidak boleh dihapus permanen.
Ringkasan
Yang Sudah Dipelajari:
1. Struktur Folder Backend (app/):
- Controllers terpisah per fitur
- Models untuk setiap tabel database
- Helpers untuk fungsi utilitas
2. Struktur Folder Views (resources/views/):
- Layouts untuk template master
- Folder per modul (master/, pasien/, farmasi/)
- File blade dengan nama deskriptif
3. Naming Convention:
- Model: PascalCase, Singular
- Tabel: snake_case, Plural
- Controller: PascalCase + Controller
4. Best Practices:
- Eager Loading untuk performa
- Form Request untuk validasi
- Soft Deletes untuk data medis
1. Struktur Folder Backend (app/):
- Controllers terpisah per fitur
- Models untuk setiap tabel database
- Helpers untuk fungsi utilitas
2. Struktur Folder Views (resources/views/):
- Layouts untuk template master
- Folder per modul (master/, pasien/, farmasi/)
- File blade dengan nama deskriptif
3. Naming Convention:
- Model: PascalCase, Singular
- Tabel: snake_case, Plural
- Controller: PascalCase + Controller
4. Best Practices:
- Eager Loading untuk performa
- Form Request untuk validasi
- Soft Deletes untuk data medis
Catatan:
Lesson ini adalah referensi. Anda tidak perlu membuat file apapun sekarang. Semua file akan dibuat bertahap di section-section berikutnya.
Lesson ini adalah referensi. Anda tidak perlu membuat file apapun sekarang. Semua file akan dibuat bertahap di section-section berikutnya.
Lesson Berikutnya (Bonus):
Di Lesson 8: Bonus - Direct Login Flow, kita akan mengatur agar user langsung diarahkan ke halaman login saat membuka aplikasi.
Di Lesson 8: Bonus - Direct Login Flow, kita akan mengatur agar user langsung diarahkan ke halaman login saat membuka aplikasi.