2012-09-14 25 views
7

Bu kod örneğine hiç rastlamadım. Bunu bana açıklamak ister misiniz? (Veya burada bir model var mı? Bunun böyle yapılmasının bir nedeni var mı? Bu ne gibi faydalar veriyor?) Genel programlamada yeniyim ve bu benim için çok ilginç:ASP.NET MVC 4'te Global.asax.cs dosyasında hangi desen yapıldı?

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

cevap

5

kolaylıkla bu gibi örnek kodu yazabiliriz: Gerekli konfigürasyon miktarı büyüdükçe

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

Ancak, birkaç mantıksal ilişkilendirilmiş parçalara bölün mantıklı. ASP.NET MVC bunu oldukça iyi destekliyor ve varsayılan proje şablonu bunu yapmaya doğru sizi yönlendirmeye çalışıyor.

+0

hmmm ... Bunu neden yaptıkları görüyorum. Mükemmel cevap! Bana (eğer mümkünse), nasıl ve neden daha derinlemesine ve temel terimlerle yaptılar? Belki çok basit bir paralel örnek sağlar? (Programlamada yeniyim). Teşekkür ederim. – JCCV

+2

@JCCV Tam olarak neden bu şekilde davrandığına dair bir yetkili olduğumdan emin değilim. En iyi tahminde, örneğin, Javaland'da yaygın olan XML konfigürasyonundaki problemlerden kaçınmak olurdu. Örneğin, XML yapılandırmasını birden çok dosyaya bölmek istiyorsanız, bunu açıkça yapılandırma dosyası biçiminde desteklemeniz gerekir. Bir kütüphaneden yapılandırma dosyalarını dahil edebilmek istiyorsanız, bu durum daha da karmaşıklaşır. Çalışma zamanında dinamik olarak yapılandırma oluşturmak istiyorsanız daha da kötüsü. – millimoose

+0

@millimoose Bu, XML konfigürasyonuna karşı genel olarak bir argüman, konfigürasyonu güncelleyen bir veya birden fazla yönteme karşı/argüman değil .. –

5

Bu model Single Responsibility Principle (SRP) kadar çok bir örneği değildir. Global.asax'ta, işleri ayarlamak için gereken üst düzey görevleri biliyoruz, ancak uygulamayı ayrı bırakıyoruz.

+0

Bu gerçekten bir kalıp değil, sınıflarınızı tasarlarken uyulması gereken bir prensip. – millimoose

+0

Teşekkürler, cevabı güncelledim. –

+0

@millimoose: kelimeleri ağzımdan çıkardı! –