ASP.Net MVC 3 Anotaciones de datos del modelo de vista

Estoy desarrollando una aplicación web ASP.Net MVC 3 con Entity Framework 4.1 y estoy un poco confundido con respecto al uso de Anotaciones de datos para la validación de formularios. Siempre devuelvo un ViewModel a una Vista en lugar de pasar el objeto real, ya que me doy cuenta de que esta es una mala práctica. Por ejemplo

public class ViewModelTeam
{
    public Team Team { get; set; }
}

i Vista podría tener algo como esto

@model UI.ViewModels.ViewModelTeam

    @Html.HiddenFor(model => model.Team.teamID)


    <div class="editor-label">
        @Html.LabelFor(model => model.Team.description)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Team.description)
        @Html.ValidationMessageFor(model => model.Team.description)
    </div>

Para validar esta Vista, he creado Anotaciones de datos en una clase parcial como esta

[MetadataType(typeof(TeamMetaData))]
public partial class Team
{
    public class TeamMetaData
    {
        [DisplayName("Team Name")]
        [Required(ErrorMessage = "Please enter a Team Name")]
        public object description { get; set; }

Y luego, en mi controlador de creación, tengo este

[HttpPost]
    public ActionResult Create(Team team)
    {
        if (ModelState.IsValid)
        {
           //Add team and redirect
        }

          //Got this far then errors have happened
          //Add Model State Errors


        ViewModelTeam viewModel = new ViewModelTeam
        {
            Team = team            
        };

        return View(viewModel);
    }

Ahora, esto funciona bien, sin embargo, cuanto más leo sobre ViewModels y la validación, más parece que es el ViewModel el que debe validarse, porque al final del día, es el ViewModel que se muestra en el Ver, no el objeto.

Por lo tanto, cambié mi ViewModel para que se parezca a la siguiente

public class ViewModelListItem
{

    public int teamID { get; set; }

    [DisplayName("Item Name")]
    [Required(ErrorMessage = "Please enter a Team Name")]
    public string description { get; set; }

Y también cambié mi controlador Create a este

[HttpPost]
    public ActionResult Create(Team team)
    {
        if (ModelState.IsValid)
        {
           //Add team and redirect
        }

          //Got this far then errors have happened
          //Add Model State Errors

        ViewModelTeam viewModel = new ViewModelTeam();
     viewModel.description = team.description;

        return View(viewModel);
    }

De nuevo, esto funciona, pero tengo la sensación de que el segundo método es un poco desordenado o no tan eficiente en la primera forma de hacerlo.

Me interesaría escuchar los pensamientos de otras personas sobre esto. Gracias por su ayuda y pido disculpas por una publicación tan larga.

Respuestas a la pregunta(2)

Su respuesta a la pregunta