<h2>Arquitetura e Design Patterns em Laravel</h2>
<p>Dominar Laravel avançado começa pelo entendimento profundo de sua arquitetura. O padrão MVC tradicional é apenas a base. Em projetos reais, você precisa conhecer Repository Pattern, Service Layer e Dependency Injection para manter código escalável e testável. A Container de IoC do Laravel é poderosa, mas muitos desenvolvedores não a exploram adequadamente.</p>
<pre><code class="language-php">// Service Layer para separação de responsabilidades
namespace App\Services;
class PaymentService {
private PaymentRepository $repository;
public function __construct(PaymentRepository $repository) {
$this->repository = $repository;
}
public function processPayment(Order $order): bool {
$transaction = $this->repository->create([
'order_id' => $order->id,
'amount' => $order->total,
'status' => 'pending'
]);
try {
// Integração com gateway
$response = $this->chargeCard($order->payment_method);
$transaction->update(['status' => 'completed', 'gateway_id' => $response->id]);
return true;
} catch (Exception $e) {
$transaction->update(['status' => 'failed', 'error' => $e->getMessage()]);
return false;
}
}
}
// No Controller: injeção automática
public function checkout(PaymentService $service) {
$service->processPayment($this->order);
}</code></pre>
<h2>Otimização de Performance e Queries</h2>
<p>A maioria dos problemas de performance em Laravel vem de queries ineficientes. Você precisa dominar Eager Loading, Query Optimization e Caching estratégico. O comando <code>debugbar</code> é seu melhor amigo durante desenvolvimento, mas implementar índices no banco de dados é obrigação em produção.</p>
<pre><code class="language-php"></code></pre>
<h2>Filas, Jobs e Background Processing</h2>
<p>Operações pesadas devem ser assíncronas. Jobs no Laravel transformam tarefas longas em processamento em background, mantendo seu usuário feliz. Redis é a melhor opção para fila em produção, e você deve conhecer como implementar retry logic e deadline handling adequadamente.</p>
<pre><code class="language-php">// Job com retry e timeout
namespace App\Jobs;
class ProcessLargeExport implements ShouldQueue {
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $tries = 5;
public $timeout = 300; // 5 minutos
public $backoff = [10, 30, 60, 120, 300]; // Espera progressiva
public function __construct(private Report $report) {}
public function handle() {
try {
$this->report->export();
event(new ReportExported($this->report));
} catch (Exception $e) {
if ($this->attempts() > 2) {
Mail::send(new ExportFailedMail($this->report, $e));
}
throw $e;
}
}
public function failed(Exception $exception) {
$this->report->markAsFailed($exception->getMessage());
}
}
// Dispatch com delay
ProcessLargeExport::dispatch($report)->delay(now()->addMinutes(5));</code></pre>
<h2>Autenticação Avançada e Autorização</h2>
<p>Laravel oferece mais que autenticação básica. Você precisa implementar role-based access control (RBAC), dois fatores e auditoria. Policies e Gates são fundamentais para autorização granular em aplicações complexas.</p>
<pre><code class="language-php">// Policy com lógica avançada
namespace App\Policies;
class PostPolicy {
public function update(User $user, Post $post): bool {
// Autor ou admin
return $user->id === $post->user_id || $user->isAdmin();
}
public function delete(User $user, Post $post): bool {
// Só admin ou autor (se publicado há menos de 1 hora)
if ($user->isAdmin()) return true;
if ($user->id === $post->user_id && $post->published_at?->diffInMinutes() < 60) {
return true;
}
return false;
}
}
// No Controller
public function update(Post $post) {
$this->authorize('update', $post); // Valida policy automaticamente
$post->update(request()->validated());
}
// Duas Fatores com Fortify
use Laravel\Fortify\Fortifiable;
class User extends Model {
use Fortifiable;
public function hasTwoFactorEnabled(): bool {
return $this->two_factor_secret !== null;
}
}</code></pre>
<h2>Testes Automatizados e Qualidade</h2>
<p>Não escreva código que não passa em testes. Em projetos reais, testes economizam horas de debugging. PHPUnit com fixtures do Laravel permite testar desde queries até fluxos completos de API com facilidade. Cobertura acima de 80% é o padrão que você deve buscar.</p>
<pre><code class="language-php">// Feature Test: testa fluxo real
namespace Tests\Feature;
class OrderFlowTest extends TestCase {
public function test_complete_purchase_flow() {
$user = User::factory()->create();
$product = Product::factory()->create(['price' => 99.90]);
// Simula requisição autenticada
$response = $this->actingAs($user)
->postJson('/api/orders', [
'items' => [['product_id' => $product->id, 'quantity' => 2]]
])
->assertStatus(201);
$order = Order::findOrFail($response->json('id'));
$this->assertEquals(199.80, $order->total);
// Verifica envio de email
Mail::assertSent(OrderConfirmation::class);
}
public function test_payment_failure_handling() {
$this->mock(PaymentGateway::class, function ($mock) {
$mock->shouldReceive('charge')->andThrow(PaymentException::class);
});
$response = $this->actingAs(User::factory()->create())
->postJson('/api/orders/1/pay')
->assertStatus(422);
}
}</code></pre>
<h2>Conclusão</h2>
<p>Dominar Laravel avançado exige três pilares: <strong>primeiro</strong>, entender padrões de design e arquitetura (Service Layer, Repository Pattern) para código escalável; <strong>segundo</strong>, otimizar relentlessly com eager loading, caching e background jobs porque performance importa; <strong>terceiro</strong>, implementar testes como parte do desenvolvimento, não como reflexão tardia. Projetos reais exigem profundidade nesses temas, não superficialidade em muitos.</p>
<h2>Referências</h2>
<ul>
<li><a href="https://laravel.com/docs" target="_blank" rel="noopener noreferrer">Laravel Official Documentation</a></li>
<li><a href="https://laravel.com/docs/contributions#coding-style" target="_blank" rel="noopener noreferrer">Laravel Design Patterns and Best Practices</a></li>
<li><a href="https://phpunit.de/" target="_blank" rel="noopener noreferrer">PHPUnit Testing Framework</a></li>
<li><a href="https://spatie.be/guidelines/laravel-php" target="_blank" rel="noopener noreferrer">Spatie Laravel Best Practices</a></li>
<li><a href="https://www.php.net/manual/en/intro.php" target="_blank" rel="noopener noreferrer">SOLID Principles in PHP</a></li>
</ul>