Code Smell 01 - Anemic Models

Code Smell 01 - Anemic Models

Your objects have no behavior.

Maxi Contieri
·Oct 20, 2020·

2 min read

Subscribe to my newsletter and never miss my upcoming articles

Listen to this article

TL;DR: Don't use objects as data structures

Protocol is empty (with setters/getters).

If we ask a domain expert to describe an entity he/she would hardly tell it is 'a bunch of attributes'.


  • No Encapsulation.

  • No mapping to real world entities.

  • Duplicate Code

  • Coupling

  • Writer / Reader mismatch.


1) Find Responsibilities.

2) Protect your attributes.

3) Hide implementations.

4) Delegate


  • DTOs

Sample Code



class Window {
    public $height;
    public $width;

    function getHeight() {
        return $this->height;

    function setHeight($height) {
        $this->height = $height;

    function getWidth() {
        return $this->width;

    function setWidth($width) {
        $this->width = $width;


final Class Window{ 

  function area(){

  function open(){

  function isOpen(){



Sophisticated linters can automate detection. They should ignore setters and getters and count real behavior methods.

Also Known as

  • Data Class


  • Anemic
  • OOP as Data
  • Encapsulation
  • Setters/Getters
  • Mutability


Avoid anemic models. Focus always on protocol instead of data. Behaviour is essential, data is accidental.


More info

Object-oriented programming increases the value of these metrics by managing this complexity. The most effective tool available for dealing with complexity is abstraction. Many types of abstraction can be used, but encapsulation is the main form of abstraction by which complexity is managed in object-oriented programming.

Rebecca Wirfs-Brock


Photo by Stacey Vandergriff on Unsplash

This article is part of the CodeSmell Series.

Last update: 2021/05/30

Share this


Technical Opinions are my own. I don't have the revealed truth.

Software Design is a creative activity. These are hints and not rigid rules.

I write on BackEnd Business Systems and OOP Design. My advice/experience might not suit other systems.