The anemic domain model is described as a programming anti-pattern where the domain objects contain little or no business logic like validations, calculations, rules, and so forth. The business logic is thus baked into the architecture of the program itself, making refactoring and maintenance more difficult and time-consuming. Overview This pattern was first described by Martin Fowler, who considers the practice an anti-pattern. He says: In an anemic domain design, business logic is typically implemented in separate classes which transform the state of the domain objects. Fowler calls such external classes transaction scripts. This pattern is a common approach in Java applications, possibly encouraged by technologies such as early versions of EJB's Entity Beans, as well as in .NET applications following the Three-Layered Services Application architecture where such objects fall into the category of "Business Entities" (although Business Entities can also contain behavior). Fowler describes the transaction script pattern thus: In his book "Patterns of Enterprise Application Architecture", Fowler noted that the transaction script pattern may be proper for many simple business applications, and obviates a complex OO-database mapping layer. An anemic domain model might occur in systems that are influenced from Service-Oriented Architectures, where behaviour does not or tends to not travel, such as messaging/pipeline architectures, or SOAP/REST APIs. Architectures like COM+ and Remoting allow behaviour, but increasingly the web has favoured disconnected and stateless architectures. Criticism There is some criticism as to whether this software design pattern should be considered an anti-pattern, since many see also benefits in it, for example: Clear separation between logic and data. Works well for simple applications. Results in stateless logic, which facilitates scaling out. Avoids the need for a complex OO-Database mapping layer. More compatibility with mapping and injection frameworks expecting dumb properties rather than a specific constructor or property population order. A common criticism is the idea that anemic domain model makes it easier to follow the SOLID principles: "The ‘S’ refers to the Single Responsibility Principle, which suggests that a class should do one thing, and do it well (...)" . But, according to Robert C. Martin, this is a misunderstanding of that principle: "Of all the SOLID principles, the Single Responsibility Principle (SRP) might be the least well understood. That’s likely because it has a particularly inappropriate name. It is too easy for programmers to hear the name and then assume that it means that every module should do