Command Query Responsibility Segregation (CQRS) is a pattern that separates read and write operations in an application.

Why CQRS?

Traditional CRUD approaches can become complex as applications grow. CQRS splits responsibilities:

  • Commands: Handle changes to data
  • Queries: Handle data retrieval

Example

Command class:

class CreateOrderCommand {
    public function __construct(public int $userId, public array $items) {}
}

Query class:

class GetUserOrdersQuery {
    public function __construct(public int $userId) {}
}

Benefits

  • Improved scalability
  • Clear separation of concerns
  • Optimized for complex business domains

Conclusion

CQRS, when combined with Event Sourcing, can create highly maintainable and flexible PHP applications.