title: I am still hesitating to use ViewModels instead of a Model for the View
body: <p>Wether I use Automapper or manually mapping, that plays no role.</p>
  
  <p>All the data for a ReleaseViewModel must be first in the Release because it is filled in the data access layer with it. 90% of my model are like this. Why the overhead of duplicating everything?</p>
  
  <p>What about the KISS principle and over-engineering?</p>
  
  <p>Of course every tool for its appropriate task, but very often I read on SO that not using ViewModels in asp.net mvc is a NO-GO.</p>
  
  <p>Where to draw the line? Should I use ViewModels when they differentiate to 50 %, 75% or 99% from my models ?</p>
  
  <p>I have a model Release:</p>
  
  <pre><code> public class Release
      {      
          public int Id { get; set; }       
          public string Name { get; set; }
          public string Author { get; set; }
          public DateTime CreatedAt { get; set; }
          public int FailedTestsCount { get; set; }
          public int SucceededTestsCount { get; set; }
          public int SumTestsCount
          {
              get
              {
                  return SucceededTestsCount + FailedTestsCount;
              }
          }
          public int SumTestingTime { get; set; }
      }
  </code></pre>
  
  <p>a viewmodel ReleaseViewModel:</p>
  
  <pre><code>public class ReleaseViewModel
  {
      [HiddenInput(DisplayValue = false)]
      public int Id { get; set; }
  
      [Required(ErrorMessage = "Name must not be empty.")]
      [StringLength(30, ErrorMessage = "Enter max. 30 chars for a name.")]
      [Remote("ReleaseExists", "Release", ErrorMessage = "This name already exists.")]
      public string Name { get; set; }    
      public string Author { get; set; }    
      public DateTime CreatedAt { get; set; }    
      public int FailedTestsCount { get; set; }    
      public int SucceededTestsCount { get; set; }    
      public int SumTestsCount 
      {
          get
          {
              return SucceededTestsCount + FailedTestsCount;
          }
      }
  
      public int SumTestingTime { get; set; }
  }
  </code></pre>