Case classes in Scala are standard classes enhanced with pattern-matching, equals, … (or am I wrong?). Moreover they require no “new” keyword for their instanciation. It seems to me that they are simpler to define than regular classes (or am I again wrong?).
There are lots of web pages telling where they should be used (mostly about pattern matchin). But where should they be avoided ? Why don’t we use them everywhere ?
There are many places where case classes are not adequate:
Sometimes these requirements show up late in the design, and requires one to convert a case class into a normal class. Since the benefits of a case class really aren’t all that great — aside from the few special cases they were specially made for — my own recommendation is not to make anything a case class unless there’s a clear use for it.
Or, in other words, do not overdesign.