Skip to content

Homepage Module

The Homepage module demonstrates Direct Mode (UseCase pattern) - the simplest architectural approach for read-only operations without complex business logic.

Architecture Mode: Direct Mode

Direct Mode uses the UseCase pattern where controllers invoke use cases directly, without routing through Command/Query buses. This is appropriate for:

  • Simple read-only operations
  • Pages without business logic
  • Rapid prototyping

Implementation

The HomeUseCase implements UseCaseInterface:

final readonly class HomeUseCase implements UseCaseInterface
{
    public function execute(UseCaseRequestInterface $request): UseCaseResponseInterface
    {
        $greeting = $request->userEmail
            ? sprintf('Welcome, %s', $request->userEmail)
            : 'Welcome to CleanShelf';

        return new HomeResponse($greeting, $messageOfTheDay, $currentDateTime);
    }
}

Controller Flow

$request = new HomeRequest($userEmail);
$response = $this->homeUseCase->execute($request);
// Render template with $response data

When to Use This Pattern

  • No domain events needed
  • No transactions required
  • Simple data retrieval or transformation
  • No side effects

For operations requiring business rules, events, or transactions, use Bus Mode instead.

Routes

Method Path Controller
GET / HomeController::index

See Also