2012-09-14 5 views
7

Nunca me he encontrado con este patrón de código aquí. ¿Alguien me importaría explicarme? (¿O hay un patrón aquí? ¿Hay alguna razón por la que esto se hizo así? ¿Qué beneficios está dando esto?) Soy nuevo en la programación general, y esta es una muy interesante para mí:¿Qué patrón se está haciendo en el archivo Global.asax.cs en ASP.NET MVC 4?

Global.asax.cs

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     WebApiConfig.Register(GlobalConfiguration.Configuration); 
     //... 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     //... 
    } 

WebApiConfig.cs

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 
} 

RouteConfig.cs

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

Respuesta

5

Desde aquí se puede escribir el código en su muestra de la siguiente manera:

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 

    GlobalConfiguration.Configuration.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional }); 

    RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    RouteTable.Routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { 
      controller = "Home", 
      action = "Index", 
      id = UrlParameter.Optional }); 
} 

Sin embargo, como la cantidad de configuración necesaria crece, que tiene sentido para dividirlo en varias fracciones lógicas. ASP.NET MVC lo admite bastante bien, y la plantilla de proyecto predeterminada solo intenta guiarte para que lo hagas.

+0

hmmm ... Veo por qué lo hicieron. ¡Gran respuesta! ¿Puede explicarme (si es posible) cómo y por qué lo hicieron más a fondo y en términos básicos? Tal vez proporcione un ejemplo paralelo muy simple? (Soy nuevo en programación). Gracias. – JCCV

+2

@JCCV No estoy seguro de ser una autoridad sobre exactamente por qué hicieron las cosas de esta manera. Mi mejor opción sería evitar los problemas con la configuración XML, que era común en, por ejemplo, Javaland. Por ejemplo, si desea permitir la división de la configuración XML en varios archivos, debe admitir esto explícitamente en el formato del archivo de configuración. Esto se vuelve más complicado si desea poder incluir archivos de configuración de una biblioteca. Aún peor si desea generar dinámicamente la configuración en tiempo de ejecución. – millimoose

+0

@millimoose Ese es un argumento en contra de la configuración de XML en general, no es un argumento para/contra uno o múltiples métodos actualizando la configuración. –

5

Esto no es un patrón como mucho un ejemplo de la Single Responsibility Principle (SRP). En Global.asax, sabemos de las tareas de alto nivel que se requieren para configurar las cosas, pero dejamos la implementación separada.

+0

Eso no es realmente un patrón, sino un principio a seguir al diseñar sus clases. – millimoose

+0

Gracias, actualicé la respuesta. –

+0

@millimoose: ¡me sacó las palabras de la boca! –

Cuestiones relacionadas