Arsitektur & Best Practices — Laravel

Mengorganisir kode Laravel untuk project yang scalable. Service Pattern: // App/Services/OrderService.php class OrderService { public function place(User $user,

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:

  1. Fat models, skinny controllers — logic di model/service, bukan controller
  2. Single Responsibility — satu class, satu tanggung jawab
  3. Use Form Requests — validasi di class terpisah
  4. Use Resources — transform response di class terpisah
  5. Use Events — decouple side effects
  6. Use Queues — async untuk tugas berat
  7. Use CachingCache::remember() untuk query yang sering
  8. Write tests — setiap fitur punya test
  9. Use .env — jangan hardcode config
  10. Follow PSR-12 — coding standard PHP

Yang akan kamu pelajari