Книга Фаулера Refactoring перечисляет "Класс данных" как запах кода. Однако при модульном тестировании метода, передавая объекты значений, например, объекты передачи данных, сделать тестирование намного проще, чем пытаться настроить или изучить состояние внутри класса.
Мне кажется, что методология Test Driven Development основана на идее, что легко написать тесты - это признак того, что интерфейс чист, а метод является сплоченным. Чисто идемпотентные методы легче всего тестировать и проще всего использовать повторно. Так почему же класс данных плохой? Рекомендуемое исправление заключается в перемещении поведения в класс данных, но зачем нужно, чтобы объект значения нуждался в поведении?