Mengorganisir kode Laravel untuk project yang scalable.
Service Pattern:
// App/Services/OrderService.php
class OrderService {
public function place(User $user, array $items): Order {
return DB::transaction(function () use ($user, $items) {
$order = Order::create(["user_id" => $user->id, "status" => "pending"]);
foreach ($items as $item) {
$order->items()->create($item);
Product::find($item["product_id"])->decrement("stock", $item["quantity"]);
}
event(new OrderPlaced($order));
return $order;
});
}
}
// Controller — tipis, delegasi ke service
class OrderController {
public function store(Request $request, OrderService $service) {
$order = $service->place($request->user(), $request->items);
return new OrderResource($order);
}
}
Best practices:
- Fat models, skinny controllers — logic di model/service, bukan controller
- Single Responsibility — satu class, satu tanggung jawab
- Use Form Requests — validasi di class terpisah
- Use Resources — transform response di class terpisah
- Use Events — decouple side effects
- Use Queues — async untuk tugas berat
- Use Caching —
Cache::remember()untuk query yang sering - Write tests — setiap fitur punya test
- Use .env — jangan hardcode config
- Follow PSR-12 — coding standard PHP