2008-11-05 22 views
7

ASP.NET MVC'de, tüm denetleyiciler için "Denetleyici" sonekini kullanmamız gerekiyor. Bu gereksiz yere kısıtlayıcı görünüyor - bunun için teknik bir neden var mı?Denetleyiciler neden ASP.NET MVC adı tabanlı?

Çoğunlukla merak ediyorum, ancak daha esnek adlandırma kurallarının kod düzenini iyileştirebileceği durumları görebiliyorum. Olası denetleyici sınıflarının keşfi, Controller türetilmiş sınıfları aramak için yansıma kullanılarak kolayca oluşturulamadı mı? Veya bu denetleyici sınıflarının ControllerAttribute ile işaretlenmesini mi istiyorsunuz?

+0

@ shog9: Okuryazarlığın gelişmesi için teşekkürler. –

+0

@Augusto: sorun yok. – Shog9

cevap

14

MVC topluluğu, "convention over configuration" değerlerine göre Ruby on Rails tarafından büyük ölçüde etkilenmiştir. Her şeyi tutarlı bir şekilde isimlendirerek, uygulama sıfır yapılandırmasıyla çalışabilir.

+0

Beni ona yendin! İşte bir link: http://en.wikipedia.org/wiki/Convention_over_configuration –

+0

Evet; Teşekkürler. Ben de onu yakaladım. –

3

Bu sözleşmenin yararlarından biri, bir URL segmentine, denetleyiciye ve bir model sınıfının hepsinin aynı ada sahip olması yaygın olmasıdır.

URL:/ürün/ Denetleyici: Ürün: Kontrolör Model: Ürün

Bu adlandırma çakışması neden olur. Bu nedenle, bu anlaşmazlığı önlemek için "Denetleyici" ile eklenmiş denetleyici adlarına sahip olmak için bir sözleşme yaptık. Ancak, bu davranışı genişletilebilirlik API'larımız aracılığıyla geçersiz kılabilirsiniz.

+0

Aslında Phil ... REST tarafından bu URL segmentleri koleksiyonları adlandırmalıdır; bu, denetleyicilerin genellikle 'ProductsController' (/ products/1) 'de olduğu gibi çoğulken, model varlığı tekil "Ürün" olarak tekildir çünkü koleksiyon görünümleri model IEnumerable kullanacaktır '. Yani yine de bir çatışma olmazdı. Ancak kongre iyidir, çünkü aynı zamanda (insanların şikayeti olmadan) öznitelikler, koleksiyonlar, sözlükler, listeler vb. Gibi yerlerde de kullanılır. Bu tipler de * geleneksel olarak * sonekleri kullanır. Tabii ki gelişme kullanılabilirliği için. –