title: How do I remain DRY with asp.net mvc view models & data annotation attributes?
body: <p>How do I remain DRY with asp.net mvc view models &amp; data annotation (validation, display, and data modeling) attributes with Asp.Net MVC?  I have passed model objects as well as action specific view models to views.  I find both directions to have some issues with trying to remain DRY.</p>
  
  <ul>
  <li><p><strong>Use model objects as your view model:</strong>  This works fine in simple situations and allows you to only write data annotation attributes once, on each model object.  The problem arises when you have complex views that require more than one object type.  The resulting view model architecture is a mishmash of using view model classes and actual model classes.  Additionally, this method can expose model properties to your view that you do not intend.</p></li>
  <li><p><strong>Use a unique view model class per action:</strong>  The view model class only contains view specific properties, decorated with data annotation attributes.  In my experience, this method has not proved to be very DRY, as data annotation attributes tend to get duplicated across view model classes.  For example, New and Edit view models share a lot, but not all, of properties and data annotations.</p></li>
  </ul>
  
  <p>How do I remain DRY with asp.net mvc view models &amp; data annotation attributes?</p>