2012-09-14 4 views
7

Nigdy nie natknąłem się na ten wzór kodu tutaj. Czy ktoś chciałby mi to wyjaśnić? (Czy jest tu nawet wzorzec?) Czy jest jakiś powód, dla którego tak zostało zrobione? Jakie korzyści daje to dawanie?) Jestem nowy w programowaniu ogólnym i jest to dla mnie bardzo interesujące:Jakiego wzorca dokonuje się w pliku Global.asax.cs w 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 } 
     ); 
    } 
} 

Odpowiedz

5

Można łatwo napisać kod w swoim próbki tak:

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 }); 
} 

Jednakże, jak ilość niezbędnej konfiguracji rośnie, warto podzielić ją na kilka logicznie powiązanych kawałki. ASP.NET MVC obsługuje to dość dobrze, a domyślny szablon projektu próbuje tylko poprowadzić cię do tego.

+0

hmmm ... Rozumiem, dlaczego to zrobili. Świetna odpowiedź! Czy możesz mi wyjaśnić (jeśli to możliwe), w jaki sposób i dlaczego zrobili to bardziej dogłębnie i w kategoriach podstawowych? Może dostarczyć bardzo prosty przykład równoległy? (Jestem nowy w programowaniu). Dziękuję Ci. – JCCV

+2

@JCCV Nie jestem pewien, czy jestem autorytetem w sprawie dokładnie tego, dlaczego robili to w ten sposób. Moim zdaniem najprościej byłoby uniknąć problemów z konfiguracją XML, która była powszechna na przykład w Javaland. Na przykład, jeśli chcesz zezwolić na podział konfiguracji XML na wiele plików, musisz to wyraźnie zawrzeć w formacie pliku konfiguracyjnego. To staje się bardziej skomplikowane, jeśli chcesz mieć możliwość dołączania plików konfiguracyjnych z biblioteki. Jeszcze gorzej, jeśli chcesz dynamicznie generować konfigurację w czasie wykonywania. – millimoose

+0

@millimoose To jest argument przeciwko ogólnie konfiguracji XML, nie jest argumentem za/przeciw jednej lub wielu metodom aktualizującym konfigurację. –

5

To nie jest wzór tyle przykładem Single Responsibility Principle (SRP). W Global.asax wiemy o zadaniach wysokiego poziomu, które są wymagane do konfiguracji, ale pozostawiamy implementację oddzieloną.

+0

To naprawdę nie jest wzorzec, ale zasada, którą należy przestrzegać przy projektowaniu zajęć. – millimoose

+0

Dzięki, zaktualizowałem odpowiedź. –

+0

@millimoose: wziął słowa prosto z moich ust! –

Powiązane problemy