Symptom

A class that holds fields with getters and setters but no behavior — and consumers do all the operations on it externally.

Goal

Behavior that belongs with the data lives on the class; the class becomes a real domain object.

Smellier version

class Address { street; city; zip; }
function format(a) {
return `${a.street}, ${a.city} ${a.zip}`;
}

Fresher version

class Address {
format() {
return `${this.street}, ${this.city} ${this.zip}`;
}
}
Example source: Illustrative example written for this site, not a quotation from any source.
Pressure

Domain logic gets scattered to consumers; the class's data invariants aren't enforced; encapsulation is theater.

Tradeoff

Pulling behavior onto the data class can create circular dependencies (the class now needs collaborators the original consumers had); the migration touches every consumer that did the work externally.

Relief

Invariants are enforceable; consumers write less domain plumbing; tests target the class itself.

Trap

Attaching every operation that touches the class onto the class — including operations that genuinely belong to a use case, a service, or a different domain — turns the data class into a god object.