# 14. Standar Kualitas Pengembangan

## Naming

- **Konsisten:** camelCase untuk variable/method; PascalCase untuk class; snake_case untuk DB/konfig.
- **Deskriptif:** Nama fungsi/class menjelaskan tanggung jawab (e.g. `OrderService::createFromCart`, bukan `OrderService::process`).

## Controller

- **Tidak boleh logic bisnis di controller.** Controller: validasi input (Request), panggil Service, return Response/Resource/Redirect.
- Satu method satu use case; jika terlalu banyak, pecah ke controller lain atau action class.

## Modul Boundary

- Setiap modul punya boundary jelas: public API (controller + service interface) dan internal (repository, model).
- Tidak ada query langsung di view; data dari controller/service.

## Event & Service

- **Event wajib** untuk aksi yang mempengaruhi modul lain atau side effect (notify, report, sync).
- **Service wajib** untuk use case yang melibatkan lebih dari satu model atau aturan bisnis.

## View

- Tidak ada query Eloquent di Blade; tidak ada business logic (if diskon, hitung total, dll). Semua dari controller/view model.

## Testing

- Critical path (order, payment, auth) punya feature test.
- Logic rumit (kalkulasi, rule promo) punya unit test.

## Code Review Checklist

- [ ] Tidak ada logic di controller (hanya delegasi ke service).
- [ ] Naming konsisten dan jelas.
- [ ] Policy/middleware untuk aksi sensitif.
- [ ] Event dipakai untuk integrasi antar modul.
- [ ] Migrasi reversible (down) jika mungkin.
