PartialView in tükettiği bir data varsa bunun kesinlikle controllerdan gelmesi gerekir.
Veriye ihtiyacın varsa, ViewComponent (parça olarak kullanılabilir) controller ı hiç yormaksızın direkt modelden alır.
ViewComponent sayesinde;
Controllerdaki maliyet düşürülür.
Controllerdaki tek sorumluluk prensibi (Single Responsibility Principle) hemen hemen yerine getirilmiş olur.
1- ViewComponent gelen requestleri karşılayabilir mi ? ViewCpmponent ın View ı üzerinden yapılan herhangi bir post isteği ViewComponent ın cs i üzerindne karşılanabilecek mi?
ViewComponentların cs dosyaları controller mekanizması gibi çalışamamaktadır. Sadece get operasyonlarında çalışabilmekte. Belirli bir veri göndereceksek o zaman render edebilmekteyiz. Herhangi bir gelen isteği ViewComponent sınflarında karşılayamıyoruz. İstekleri sadece controller lardaki actionlarda karşılayabiliriz. Yapılan bir post, put, delete, get isteğini bile sadece controllerlarda karşılayabilmekteyiz. ViewComponent ın View dosyasında bir form tasarlandıysa bunun post neticesini bir controller a yönlendirmek gerekir.
2- ViewComponent’a Render edilirken değer gönderme
Render edilme esnasında ViewComponent a Layout üzerinden gönderilen değer ya da parametreler üzerinden cs üzerinde farklı değerleri handle edebilmekte ve render neticesinde verilecek çıktılara müdahale edebilmekteyiz. ViewComponent tersine bir data göndermemizi sağlayıp o dataya uygun modüler sonuçlar elde etmemizi sağlar.
PartialViewden ayrılan yönü bu noktadır. PartialView de akış tek yönlüdür. PartialView ı render ederken controller a müdahale edemeyiz çünkü controller partialview ı render etmiştir çoktan… Ama ViewComponentte controller olmadığı için ilgili cs i tetiklemeden önce cs e davranışları belirleyebileceğimiz değerleri gönderip ona göre handle işlemlerine müdahale edebiliyoruz, çıktıyı da değiştirebiliyoruz. 2. parametre ile yapabiliriz.
anonim bir nesne verdik. Bu nesneyi verdiğimizde, ViewComponent a gelecek ve ViewComponent bunu yakalayacaktır. ViewComponent verdiğimiz anonim türü parametre olarak karşılayacaktır.
Bu şekilde render edilecek parçanın farklı sonuçlarla render edilmesini sağlayabiliriz. Yani değerlere ViewComponent üzerinden müdahale edebiliriz.
3- NonViewComponent Attribute ‘ u ile ViewComponent a ait niteliklerin ezilmesidir.
Mimaride bir sınıftan tasarladığınız belirli nitelik kazandırdığınız sınfıları farklı amaçlarla kullanmak isteyebiliriz. O sınıfın render edebilen, çağırılabilen, ezilebilen ihtiyacını yapabilen bir sınıf olmasını istemeyebiliriz. Böyle durumlarda ilgili sınıfları kendi özelliklerini ezmek istebiliriz. Controllerlarda NonController , Actionlarda NonAction kullanılıyor farklı amaçlara hizmet edebilmek için.
ViewComponentta böyle bir ihtiyaç doğrultusunda, bir ViewComponent ın , ViewComponenttan türeyen herhangi bir sınıfın ViewComponent olmadığını bildirebilmek için NonViewComponent ile işaretlenmesi yeterlidir.
PartialViewlere göre ViewComponent efektif ve asenkron (async) yapılanmayı daha hızlı sağlayabilir.