← Blog

SOLID em MuleSoft: o que vem do design orientado a objetos e o que não se encaixa

Quase toda aplicação Mule começa pequena e organizada. Um ano depois, a mesma aplicação tem um flow de 60 passos que valida, transforma, chama três sistemas e envia um e-mail, e ninguém quer mexer nele antes de um release. Os princípios SOLID foram criados para evitar exatamente esse tipo de degradação em código orientado a objetos. A pergunta para quem trabalha com integração é quanto desse conselho sobrevive à troca de classes por flows, contratos de API e adaptadores.

Esta série responde com código que roda. Cada artigo tem uma versão antes e uma depois no repositório mulesoft-solid-examples, uma aplicação Mule 4 com testes MUnit que comprovam o que o texto afirma. Nada depende de sistemas externos: ERPs e meios de pagamento são simulados, então basta clonar e rodar mvn clean test.

De onde vem o SOLID

Robert C. Martin descreveu os princípios no artigo Design Principles and Design Patterns, de 2000, e Michael Feathers depois os organizou no acrônimo SOLID. Dois deles são mais antigos que o acrônimo: Bertrand Meyer formulou o Princípio Aberto/Fechado em 1988, e a ideia de substituição de Barbara Liskov vem da palestra Data Abstraction and Hierarchy, de 1987.

Os cinco foram escritos para linguagens orientadas a objetos, em que a unidade de design é a classe e a unidade de reuso é a interface. O Mule não tem nenhuma das duas. Ele tem flows, sub-flows, configuração, DataWeave, especificações de API e os sistemas por trás delas. Por isso cada princípio precisa ser traduzido antes de ser útil, e a tradução não funciona igualmente bem para os cinco.

Quanto cada princípio se encaixa

Princípio O que vira no Mule Encaixe
Responsabilidade Única Flows e sub-flows agrupados pelo motivo de mudança Forte — quase direto
Aberto/Fechado Novo comportamento por configuração e novos flows, sem editar o roteador Parcial — útil, com custos reais
Substituição de Liskov Várias implementações (adaptadores, system APIs) respeitando um contrato Forte, quando se deixa de procurar herança
Segregação de Interfaces Um contrato de API por tipo de consumidor Forte no nível de API, fraco dentro da aplicação
Inversão de Dependência Flows de negócio donos de um modelo canônico que os adaptadores implementam Forte — é para isso que existe a conectividade API-led

Os artigos deixam as lacunas explícitas. O Aberto/Fechado, por exemplo, leva a roteamento dinâmico, que o Anypoint Studio não consegue validar e que o MUnit só aceita com um contorno. Esse custo faz parte da lição.

O que cada artigo traz

  • O princípio na forma original, em uma ou duas frases.
  • O que ele significa numa aplicação Mule e onde a analogia se quebra.
  • Um exemplo antes e depois tirado do repositório, em sintaxe válida do Mule 4.
  • O teste MUnit que mostra a diferença.
  • Um checklist curto de revisão.

Rodando os exemplos

git clone https://github.com/brunosouzas/mulesoft-solid-examples.git
cd mulesoft-solid-examples
mvn clean test

O MUnit roda no runtime Enterprise do Mule, então o Maven precisa das credenciais do repositório Enterprise da MuleSoft no ~/.m2/settings.xml, como em qualquer projeto MuleSoft. Para chamar os endpoints, importe o projeto no Anypoint Studio, rode a aplicação e use as requisições do requests.http.

Esta série substitui a versão de 2025, que não tinha código executável e continha erros que os exemplos revelaram.