Contrary to popular belief, the model represents more than just data. The model is the entire business domain being addressed by the application. It is the classes and types that encapsulate data and behavior, services that exchange data and processes that apply business logic and validation. The model, like other areas of the application, should follow sound software development principles such as clean separation of concerns and single responsibility. The model should be independent of the user interface and can be considered a combination of data and internal plumbing.
Examples of classes that represent the model include interfaces, implementations of the interfaces that are not specific to the UI, web services, data access objects, and classes that encapsulate validation and business logic. A well-designed model contains components that are modular, easy to share, do not contain internal dependencies and work well within unit tests.