• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Como o Tipo de Acoplamento Pode Guiar a Decisão de Onde Colocar um Método

Lomanu4 Оффлайн

Lomanu4

Команда форума
Администратор
Регистрация
1 Мар 2015
Сообщения
1,481
Баллы
155
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:

  1. order.someMethod(orderInfo)
  2. 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:

  1. Camada Externa: Classes que lidam com protocolos e interfaces externas
  2. Camada de Casos de Uso: Classes que implementam a lógica de negócio
  3. 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ê?

  1. O comportamento provavelmente é específico daquele ponto do sistema
  2. É menos provável que precise ser reaproveitado em outros lugares
  3. 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):

  1. Quando o método opera exclusivamente sobre o estado interno daquela própria entidade
  2. 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:

  1. Identifique qual classe é mais transversal no sistema (tem maior acoplamento aferente)
  2. Identifique se o comportamento é específico ou generalizável
  3. Se específico, coloque o método na classe menos transversal
  4. 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

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

para conhecer tudo que oferecemos.


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

 
Вверх Снизу