title: What is the difference between an MVC Model object, a domain object and a DTO
body: <p>What is the difference between a MVC Model object, a domain object and a DTO?</p>
  
  <p>My understanding is:</p>
  
  <p><strong>MVC Model object:</strong></p>
  
  <p>Models the data to be displayed by a corresponding view. It may not map directly to a domain object, i.e. may include data from one or more domain objects.</p>
  
  <ol>
  <li>Client side</li>
  <li>May contain business logic. Eg. validations, calculated properties, etc</li>
  <li>No persistence related methods</li>
  </ol>
  
  <p><strong>Domain object:</strong></p>
  
  <p>An object that models real-world object in the problem domain like Reservation, Customer, Order, etc. Used to persist data.</p>
  
  <ol>
  <li>Server side</li>
  <li>No business logic</li>
  </ol>
  
  <p><strong>DTO (Data Transfer Object):</strong></p>
  
  <p>An object used to transfer data between layers when the layers are in separate processes, e.g. from a DB to a client app. Allows a single transaction across the wire rather than multiple calls when fetching data corresponding to multiple domain objects. A DTO contains just data and accessor methods and there is no logic present. The data is for a particular DB transaction, so it may or may not directly map to a domain object as it may include data from one or more domain objects.</p>
  
  <ol>
  <li>Used on both server and client sides as it is passed between layers</li>
  <li>No business logic</li>
  <li>No persistence related methods</li>
  </ol>
  
  <p>So, the questions:</p>
  
  <ol>
  <li><p>Is above understanding correct? Am I missing some key points?</p></li>
  <li><p>Are there any reasons not to use Domain objects as the MVC Model assuming that the Model objects do not require extra business logic?</p></li>
  <li><p>Are there any reasons not to use DTOs as the MVC Model assuming that the Model objects do not require extra business logic?</p></li>
  </ol>