Integrando MVC 3 en una aplicación de Dynamic Data

Basándome en los buenos consejos de Eduard Tomás en su post ¿WebForms y ASP.NET MVC juntos? vamos a  intentar aplicar esas mismas ideas para migrar una aplicación ASP.NET Dynamic Data a MVC 3. Una aplicación Dynamic Data es realmente una aplicación Web Forms con algunos enrutamientos particulares ya definidos.

  1. Convertir el proyecto a .net 4.0 (necesario)
    Basta con cambiarlo en propiedades del proyecto, pero no os olvidéis de confirmar con vuestro hosting que soporta el framework 4 (yo no tengo problemas porque los chicos de Domitienda-Businet están siempre a la última).
    NOTA: Cuidado porque al cambiar el framework se pierde la sección <configSections> del web.config, hay que volver a introducirla, como se indica aquí. Puedes recuperarla comparando diferencias con la versión anterior del control de código fuente que uses (y si no lo usas, sigue cavando tu tumba).
  2. Añadir assemblies en Web.config / compilation. Algunas de las librerías que indica Eduard ya estarán, puesto que Dynamic Data ya las incluye. En mi caso sólo he tenido que añadir:
    <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  3. Incluir espacios de nombres de MVC para las páginas, en Web.config / system.web / configuration / pages

    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages"/>
      </namespaces>
    </pages>


  4. Agregar referencias a System.Web.Mvc.dll (normalmente desde C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies). Si vas a usar Razor (¡cómo no!) también System.Web.WebPages.dll (desde C:\Program Files\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies).
  5. Inicializar MVC en el Global.asax.cs
    Uso el mismo código de Eduard, pero ojo porque Dynamic Data ya genera un método RegisterRoutes, así que renombramos el nuestro por RegisterRoutesMvc (también su uso en MvcInit).

    private void MvcInit()
    {
        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutesMvc(RouteTable.Routes);
    }
    
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }
    
    public static void RegisterRoutesMvc(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute("Default", "{controller}/{action}/{id}",
            new {action = "index", id = UrlParameter.Optional});
    }
  6. Cambiar el tipo de proyecto (para que Visual Studio nos ofrezca las herramientas de MVC, como Add controller, Go to view y demás comandos).
    Hay que añadir {E53F8FEA-EAE0-44A6-8774-FFD645390401} en <ProjectTypeGuids> del .csproj (ya sabes, Unload project y después Edit .csproj). Ojo que ese Guid debe ser el primero, los dos que ya estaban deben seguir pero detrás de este (así viene en un nuevo proyecto de MVC, puedes consultarlo si tienes dudas).
  7. Añadir manualmente la estructura de carpetas de MVC: Controllers, Views y Shared con las plantillas _ViewStart.cshtml, Layout.cshtml y el Web.config de Razor (sí, fíjate que en los proyectos de MVC tienes un Web.config dentro de Views; pues cópialo en tu carpeta Views y listo). Y bueno, ya estás en MVC, el resto ya es cosa tuya, ¿no? Si quieres echa un vistazo a cómo puedes empezar.

Dynamic Data es una herramienta potente para elaborar prototipos, poner en marcha rápidamente proyectos, y para ofrecer un mantenimiento sencillo de tablas (CRUD) a usuarios finales. Pero cuando la aplicación comienza a crecer, toda la ayuda que ha prestado en la fase inicial se convierte en obstáculos, por lo que es una buena idea ir abandonándolo, al menos para las páginas que tengan cierta lógica de negocio. Y es esa la oportunidad para ir migrando a MVC, ya que se va a llevar muy bien con Dynamic Data, se permite incluso tener rutas parcialmente comunes entre ambos: por ejemplo, yo tengo Acciones/List.aspx de Dynamic Data y Acciones/Notificar atendida por un Controller de MVC.

Por cierto, comentar que hace un tiempo oí que el equipo de Dynamic Data estaba planteando su migración a MVC (todavía su base es el ASP.net clásico, ya que Dynamic Data es anterior a MVC). En ese caso la integración con MVC resultará mucho más natural. Pero con las novedades de MVC que han llegado y que se esperan, quizá dicha evolución no llegue nunca a ver la luz, ya que MVC ofrece una gran facilidad para el desarrollo rápido de aplicaciones y prototipos.

Anuncios
Esta entrada fue publicada en Sin categoría. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s