This content originally appeared on DEV Community and was authored by Alberto Luiz Souza
Disclaimer
Este texto foi inicialmente concebido pela IA Generativa em função da transcrição de uma live do Dev Eficiente. Se preferir acompanhar por vídeo, é só dar o play.
Introdução
No desenvolvimento de software orientado a objetos, frequentemente nos deparamos com decisões aparentemente simples, mas que podem ter um grande impacto na evolução do sistema. Uma dessas decisões é: onde colocar um determinado método quando ele precisa de informações de duas classes diferentes? Neste post, vamos explorar como o tipo de acoplamento entre classes pode nos guiar nessa decisão.
O Dilema da Localização do Método
Imagine que você tem duas classes, A e B, e precisa implementar um comportamento que necessita de informações de ambas. Onde você coloca esse método? Em A ou em B?
Vamos usar um exemplo concreto: suponha que temos as classes Order
e OrderInfo
. Precisamos implementar uma lógica que verifica o status de um pedido (que está na classe Order
) e o state (que está na classe OrderInfo
).
Temos duas opções:
order.someMethod(orderInfo)
orderInfo.someMethod(order)
Como decidir entre uma e outra? Você pode pensar: "tanto faz" ou "depende da minha vibe no momento". Mas existe uma heurística que pode nos ajudar a tomar essa decisão de maneira mais consistente.
Entendendo os Tipos de Acoplamento
Quando falamos de acoplamento entre classes, geralmente nos referimos ao acoplamento eferente: A depende de B. Entretanto, há outro tipo de acoplamento que é igualmente importante: o acoplamento aferente, que representa quem depende de mim.
Do ponto de vista da classe B:
- Acoplamento Eferente: De quem B depende?
- Acoplamento Aferente: Quem depende de B?
A Arquitetura em Camadas e o Acoplamento
Em sistemas organizados em camadas, como na Arquitetura Limpa, temos tipicamente:
- Camada Externa: Classes que lidam com protocolos e interfaces externas
- Camada de Casos de Uso: Classes que implementam a lógica de negócio
- Camada de Entidades: Classes que representam o estado central do sistema
Em geral, a camada externa depende da camada de casos de uso, que por sua vez depende das entidades. As entidades são normalmente reutilizadas por vários casos de uso diferentes, o que significa que têm um acoplamento aferente alto - muitas classes dependem delas.
A Heurística para Decisão
Voltando ao nosso exemplo de Order
e OrderInfo
:
Se OrderInfo
está numa camada mais externa e depende de Order
(que é uma entidade), a heurística sugere colocar o método em OrderInfo
, não em Order
.
Por quê?
- O comportamento provavelmente é específico daquele ponto do sistema
- É menos provável que precise ser reaproveitado em outros lugares
- Evita inflar classes de entidade com métodos super específicos
A regra geral é: prefira colocar o comportamento em quem depende do outro (quem tem acoplamento eferente).
Exceções à Regra
Há situações em que faz sentido colocar o método na classe mais transversal (com maior acoplamento aferente):
- Quando o método opera exclusivamente sobre o estado interno daquela própria entidade
- Quando o comportamento é generalizável e pode ser reutilizado em várias partes do sistema
Por exemplo, se tivermos uma interface PaymentMethod
que pode ser implementada por várias classes, poderia fazer sentido criar um método em Order
que trabalha com qualquer implementação de PaymentMethod
.
O Trade-Off do Acoplamento Aferente Alto
Classes com acoplamento aferente alto (como entidades ou classes de bibliotecas padrão) impõem um cuidado adicional:
- Alterações nessas classes podem afetar o sistema como um todo
- Quanto mais específicos forem seus métodos, maior o risco de criar "classes Deus" gigantescas
Em linguagens como Java, pense em classes como String
, List
, Map
ou Object
. Elas têm acoplamento aferente altíssimo, e qualquer mudança nelas pode quebrar muitos sistemas.
Conclusão
Ao decidir onde colocar um método que envolve duas classes:
- Identifique qual classe é mais transversal no sistema (tem maior acoplamento aferente)
- Identifique se o comportamento é específico ou generalizável
- Se específico, coloque o método na classe menos transversal
- Se generalizável, considere colocá-lo na classe mais transversal
Este princípio de design simples pode ajudar a manter seu sistema mais organizado e facilitar sua evolução ao longo do tempo.
Jornada Dev + Eficiente
Se você gostou deste conteúdo, conheça a Jornada Dev + Eficiente, nosso treinamento focado em fazer com que você se torne uma pessoa cada vez mais capaz de entregar software que gera valor na ponta final, com máximo de qualidade e eficiência. Acesse https://deveficiente.com/oferta-20-por-cento para conhecer tudo que oferecemos.
This content originally appeared on DEV Community and was authored by Alberto Luiz Souza

Alberto Luiz Souza | Sciencx (2025-05-16T00:37:49+00:00) Como o Tipo de Acoplamento Pode Guiar a Decisão de Onde Colocar um Método. Retrieved from https://www.scien.cx/2025/05/16/como-o-tipo-de-acoplamento-pode-guiar-a-decisao-de-onde-colocar-um-metodo/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.