Open KevserAkbas opened 3 years ago
Controller da harika kodlar yazabiliriz, ancak görselleştirecek hiçbir şey olmadığı sürece, kullanıcı kodumuzun hiçbirini kullanamayacak,
Öyleyse view tam olarak nedir?
Vİew aslında bir şablon, bir HTML şablonu olarak görülür
Bu klasörde, her view bir cshtml dosyasıyla temsil edilir.
Yani her controller için, tüm cshtml dosyalarının bulunduğu bir alt klasöre ihtiyacımız var,
ancak controller o zaman hangi view ın işlenmesi gerektiğini nasıl bilecek?
Indeks metoduna sahip olduğumuz ve View ı döndürdüğümüz yerde örnek controller ı düşünelim.
Yine, kural olarak, gösterilecek view a Index.cshtml adı verilir,
bu nedenle eylem yöntemiyle aynı addır.
Bu view bulunamazsa, bir istisna atılır.
Burada da statik bir HTML sayfası kullanabilirdik.
Şu anda üzerinde çalıştığımız şey, güçlü bir şekilde yazılmış (strongly-typed) bir view dır.
Kesin olarak yazılmış bir view (strongly-typed view) oluşturmak için,
en üstte aktarılacak nesnenin türünü eklememiz gerekir.
Burada yapılan şey yine,
modeldeki tüm pie ların üzerinde döngü yapmak için Razor kodunu kullanmak,
böylece model, controller kodunda view a aktardığımız listeydi.
Burada bir foreach Razor ifadesi kullanıldı ve bu sadece bir C # ifadesidir.
Döngünün içinde, daha fazla HTML öğesi oluşturuldu.
Ve yine, Razor ifadeleri aracılığıyla, artık her bir pie ın adı ve fiyatı gibi listedeki her bir öğenin özelliklerine erişebiliyoruz.
Çoğu durumda, view a aktarmak istediğimiz modelin bir alan modeliyle eşleşmediğini göreceğiz.
Örneğin, görünümümüzün turta listesini göstermesi gerekir,
ancak turtaların ait olduğu kategorinin adını da göstermesi gerekir.
Bu durumda ViewBag'i tekrar kullanabiliriz ve ekstra verileri, yani ViewBag'i kullanarak kategorinin adını iletebiliriz.
Şimdi bu işe yararken, daha iyi bir yaklaşım,
görünüm modeli (view model) adı verilen bir şey kullanmaktır.
Görünüm modeli (View Model), view ihtiyaç duyduğu tüm verilere erişebilmesi için birden çok özelliği saran bir sınıftır.
Böyle bir görüş modeli, tam anlamıyla görünüm için bir model olarak görülebilir.
Parçacıkta burada görebileceğimiz, kodda kullanılacak bu view modeli sınıflarından biri olan PiesListViewModel'a bakalım.
Sınıf, etki alanı modeli gibi bir IEnumerable içinde Pies sarmalar,
ancak aynı zamanda CurrentCategory özelliğiyle birlikte gelir.
Bu görünüm modelinin bir örneği, böylelikle türü güçlü bir şekilde belirlenmiş görünümümüze aktarılacaktır.
MVVM patternının temeline indiğimizde ise Martin Fowler'ın önermiş olduğu Presentation Model'i görmekteyiz. Aslında MVVM, Presentation Model mimarisinin WPF ve Silverlight teknolojileri için özelleştirilmiş bir halidir. Doğrudan Silverlight ve WPF için özelleştirilmiş bir uygulama geliştirme mimarisi olduğu içinde haliyle bu teknolojilerin tüm özelllikleri fazlasıyla bu mimari model içerisinde kullanılmakta.
MVVM yapısının temel parçaları.
Model : Model, uygulama içerisinde kullanacağımız olan datadır. Bu datalar WCF RIA Services ile döndürülen entityler olabileceği gibi doğrudan tanımlanmış POCO nesneleri de olabilir.
View : View, datanın sunulduğu katmandır. Tüm görsellikler View'da yer alır. Kısaca verinin sunulduğu yerdir(Ekran).
ViewModel : ViewModel ise Model ile View'ı bağlayan yapıdır. View ile Model arasında bir yapıştırıcı görevi görür. View doğrudan ViewModel yardımıyla Model'e erişir ve bazı işlemleri gerçekleştirir. Teknolojik olarak WPF veya Silverlight teknolojilerinden konuşursak ViewModel aslında View'ın DataContext'idir.
MVVM yapısına baktığımız zaman WPF ve Silverlight teknolojilerinde bulunan Commanding, Binding, Behaviour gibi özellikleri sıklıkla kullanılır.
MVVM'in getirdiği artılar
çok popüler bir CSS kitaplığıdır
bir istemci tarafı paketidir (client-side)
Visual Studio da artık Kitaplık Yöneticisi (Library Manager) ile birlikte geliyor.
Kütüphane Yöneticisi'ni (Library Manager) veya kısaca LibMan'ı kullanarak, bir paket kaynağından istemci tarafı paketleri kolayca dahil edebiliriz.
Kütüphane Yöneticisinde yaptığımız her şey, projeye ilk kullanımda eklenen bir JSON dosyasına kaydedilecektir.
Varsayılan olarak, bu dosya oldukça boştur.
Varsayılan dosya
Bağımlılıkları getirmek için bu dosyayı manuel olarak düzenleyebilir veya paketleri aramak ve projeye eklemek için Kitaplık Yöneticisi arayüzünü (Library Manager interface) kullanabiliriz.