WP24Horas
♙ ◴
PARCEIRO RECOMENDADO Vai colocar um WordPress no ar? Comece com uma hospedagem que acompanha o seu projeto. Conhecer a HostGator link patrocinado

Desenvolvimento e Programação

Separação Clara de Camadas: Core, Domain e Infra

Por Asllan Maciel3 min de leitura
Separação Clara de Camadas - Core, Domain e Infra
Esta entrada é parte 13 de 15 na série WordPress Extremo: Arquitetura e Engenharia de Plugins

WordPress Extremo: Arquitetura e Engenharia de Plugins

Como Criar um Plugin Profissional com Composer e PSR-4

Como Criar um Plugin WordPress com Composer e PSR-4 – WordPress Extremo Dia 1

Como Usar Serviços em Plugins para Código Limpo e Desacoplado - WordPress Extremo Dia 2

Como Usar Serviços em Plugins para Código Limpo e Desacoplado – WordPress Extremo Dia 2

Como Usar Repositórios em Plugins para Separar Lógica de Dados

Como Usar Repositórios em Plugins para Separar Lógica de Dados – WordPress Extremo Dia 3

Injeção de Dependência Manual em Plugins WordPress

Injeção de Dependência Manual em Plugins WordPress – WordPress Extremo Dia 4

Criando Hooks Personalizados com do_action e apply_filters

Hooks Avançados no WordPress: apply_filters, do_action e boas práticas

Como Criar Comandos WP-CLI Personalizados para Plugins

Criando Comandos WP-CLI Personalizados para Plugins WordPress

Como Implementar um Sistema de Logs Profissional em Plugins WordPress

Como Gerenciar Logs e Erros Internos em Plugins WordPress (Do Jeito Certo)

Como Tratar Erros e Exceptions em Plugins WordPress do Jeito Certo

Tratamento de Erros e Uso Inteligente de Exceptions em Plugins WordPress

Segurança Profunda em Plugins WordPress

Segurança Profunda em Plugins WordPress

Como Internacionalizar seu Plugin WordPress (i18n e l10n) do Jeito Certo

Internacionalização e Localização (i18n e l10n)

Criando Settings Pages Profissionais no WordPress

Criando Settings Pages Profissionais no WordPress

Como Criar Permissões Customizadas e Controle de Acesso em Plugins WordPress

Permissões Customizadas e Controle de Acesso em Plugins WordPress

Separação Clara de Camadas - Core, Domain e Infra

Separação Clara de Camadas: Core, Domain e Infra

Atualizações Automáticas de Plugin WordPress via GitHub

Atualizações Automáticas via GitHub.

Checklist Final de Publicação - WordPress.org e Produção

Checklist Final de Publicação: WordPress.org e Produção

Fala Dev! Blz? Asllan aqui… vamos evoluir ainda mais nosso plugin agora com a Separação Clara de Camadas: Core, Domain e Infra!

Separar bem as camadas do seu plugin não é “frescura de programador chato”. É engenharia de verdade.

Neste post, você vai entender como organizar o seu plugin em 3 camadas fundamentais:

  • Core → Lógica de negócio que não depende de WordPress.
  • Domain → Contratos e regras do seu domínio (entidades, serviços, interfaces).
  • Infra → Tudo que é específico do WordPress (hooks, filtros, API REST, banco, etc).

😰 O problema de não separar as camadas

Você já viu plugins onde tudo acontece em uma classe só? Tipo assim:

class MeuPlugin {
  function init() {
    if (isset($_GET['acao'])) {
      $user = get_user_by('id', $_GET['user']);
      // envia email, salva log, atualiza post, etc
    }
  }
}

Esse tipo de código acopla lógica, acesso a dados e regras específicas num balaio só.

Resultado: difícil de testar, difícil de dar manutenção, e impossível de escalar.


✅ O que é essa separação de camadas?

Aqui vai o mapa da mina:

src/
│
├── Core/           <- Lógica isolada (pode ser testada fora do WP)
│   └── Services/
│       └── ValidadorDeCPF.php
│
├── Domain/         <- Regras do domínio (interfaces, contratos, entidades)
│   └── Contracts/
│       └── LoggerInterface.php
│   └── Entities/
│       └── Cliente.php
│
└── Infra/          <- Integrações específicas com o WordPress
    ├── Http/
    │   └── Controllers/
    │       └── ApiController.php
    ├── Repositories/
    │   └── UserRepository.php
    └── WordPress/
        └── Hooks.php

🚀 Como aplicar isso no plugin WP24H

Vamos supor que você tenha um serviço para validar uma assinatura via API.

1. Core → AssinaturaValidator.php

namespace WpArquiteturaExtrema\Core;

class AssinaturaValidator
{
    public function validar(string $token): bool
    {
        // Validação pura, sem WordPress
        return strlen($token) === 32;
    }
}

2. Domain → LoggerInterface.php

namespace WpArquiteturaExtrema\Domain\Contracts;

interface LoggerInterface
{
    public function info(string $message): void;
    public function error(string $message, array $context = []): void;
}

3. Infra → WordPressLogger.php

namespace WpArquiteturaExtrema\Infra;

use WpArquiteturaExtrema\Domain\Contracts\LoggerInterface;

class WordPressLogger implements LoggerInterface
{
    public function info(string $message): void
    {
        error_log("[INFO] $message");
    }

    public function error(string $message, array $context = []): void
    {
        error_log("[ERROR] $message - " . json_encode($context));
    }
}

🤖 Por que isso importa?

  • Testar sua lógica sem precisar carregar o WordPress.
  • Trocar a implementação de algo sem quebrar o resto.
  • Criar comandos WP-CLI, APIs, ou blocos Gutenberg que usam os mesmos serviços.

Agora você entende como tudo isso se encaixa num plugin robusto, sustentável e escalável.


✍️ Conclusão

Separar seu plugin por camadas não é exagero, é sobrevivência. Plugins bem escritos seguem esse modelo porque:

✔️ São testáveis
✔️ São fáceis de manter
✔️ São preparados para crescer

Agora seu desafio é adaptar nosso plugin, já muito bem estruturado, a essa nova engenharia.

WordPress Extremo: Arquitetura e Engenharia de Plugins

Permissões Customizadas e Controle de Acesso em Plugins WordPress Atualizações Automáticas via GitHub.

Sobre o autor

Asllan Maciel

Asllan Maciel, Fundador do WP24Horas, Consultor de Marketing Digital e amante do Empreendedorismo Digital. Tem um caso de amor com o WordPress.