Meaning
A code smell where a client calls a method on an object returned by another method, resulting in a long chain of method calls that indicates poor encapsulation and violates the Law of Demeter.
Primary Function
Identifies excessive method chaining as a code smell, signaling a need to refactor to reduce coupling and improve encapsulation.
Communicative Purpose
Alerts developers that the code may be overly coupled and could benefit from introducing intermediary objects or delegating methods.
Pattern
object.getX().getY().doSomething()
Core Structure
object.method().method()...
Função primária
Identifies excessive method chaining as a code smell, signaling a need to refactor to reduce coupling and improve encapsulation.
Propósito comunicativo
Alerts developers that the code may be overly coupled and could benefit from introducing intermediary objects or delegating methods.
Situações de gatilho
When code contains expressions like object.getPart().getComponent().doWork() where each intermediate object is only used to navigate to the next.
Contextos
Object-oriented codebases, especially those with deep object hierarchies, insufficient encapsulation, or overuse of getters.
Padrão
object.getX().getY().doSomething()
Estrutura central
object.method().method()...
Slots de substituição
object, method1, method2, ..., methodN
Colocados típicos
- get
- get
- get
- do
- process
- handle
- compute
Substituições comuns
- Introduce an intermediate object
- extract method
- use delegation
- apply Law of Demeter
Erros comuns
Assuming chaining is always acceptable, ignoring coupling issues, overusing getters instead of telling objects what to do
Similar / contraste
Law of Demeter, Train Wreck anti-pattern, Fluent interfaces (intentional chaining), Builder pattern
Interferências
May be confused with intentional fluent interfaces or builder patterns where chaining is deliberate and readable
Família do chunk
- Code Smells
- Law of Demeter
- Encapsulation
Nuance
Not all method chaining is problematic; fluent interfaces and builders are designed for readability and are intentional.
Efeito pragmático
Encourages refactoring towards better encapsulation, reducing dependencies and improving maintainability.
Dica de memória
Think of a train wreck of method calls.
Nota
Distinguish unintentional message chains from intentional fluent interfaces to avoid false positives.
Upgrade path
Refactor to eliminate message chains using Introduce Intermediate Object or Extract Method.
Log in to save chunks.