2012-02-17 22 views
13

Bir View için gerekli olan tüm nesneler için neredeyse bir ambalaj kağıdı gibi düşünmek doğru mu? Örneğin, müzik ve dvds satan bir çevrimiçi mağazanız olduğunu varsayalım. Göz atma sayfanızda, tüm dvds'larınızın ve müziğin listesini görüntülemek istersiniz. Bu nedenle, bir albüm listesi ve bir dvds listesi içeren iki özelliğe sahip bir ViewModel nesnesi mi oluşturursunuz?MVC'de bir ViewModel nedir?

Anlayışımdan, tüm model sınıflarına sahip olduğunuz görülüyor. Bir Album/Dvd sınıfı, ancak bunları tek başına geçirmeniz Görünümünüz için yeterli olmaz. Bir ViewModel, Görünümünüzün gerektirdiği tüm veriler için temel olarak bir taşıyıcı görevi yapar mı?

+3

Mümkün yinelenen [MVC içinde ViewModel nedir?] (Http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc) – HaveNoDisplayName

+0

@HaveNoDisplayName Ne yazık ki bu soru 4 aylık daha büyük olsa da Birini çoğaltmak için işaretlediniz, diğeri ise bundan çok daha fazla görülüyor. Başlık, gördüğüm tüm farkı yaratıyor. –

+0

Diğer soru daha iyi cevaplara sahip, bu yüzden bir başka şekilde değil, kopya olarak kapatılmalıdır. – Liam

cevap

13

Anlayışınız çoğunlukla doğrudur, ancak tamamlanmadı.

ViewModel, Modelinizin, kullandığınız veri türünden, Görünümünüzün uygun şekilde çalışabileceği veri türlerinden dönüşüm gerçekleştirebilir; Bu, ViewModel'in doğrudan Modelleri değil, aynı bilgiyi (muhtemelen bir alt kümesini) daha uygun bir formatta taşıyan diğer gemileri taşımaması anlamına da gelebilir.

Albümler ve DVD'leri bir araya getiren bir Kitaplık modeliniz olabileceğini düşünün; böyle bir modelle ilgili ViewModel arasındaki fark, Modelin ViewModel'e sahipken View'nin umursadığı (veya bilmediği) olduğunu tam olarak belirtir. bunu kolaylaştırmanın açık amacı.

+1

Bu cevap sadece kısmen doğru ve çok açık değil ("... ViewModel bunu kolaylaştırmak için açık bir amacı vardır" hiçbir şeyi açıklamıyor.). Deepakmahajan'ın cevabı derin olmamakla birlikte daha doğrudur. Burada daha fazla ayrıntı veren ilgili bir soruya cevap verdim: http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc/29135747#29135747 – Sam

+0

Gelecek okuyucular, Sam tarafından verilen bağlantıyı takip edin ve bir göz atın cevapta. Gerçekten çok faydalıdır. –

14

ViewModels, bir veya daha fazla veri modelindeki veya kaynağındaki birden fazla nesneyi tek bir nesneye, görünüm ve tüketim için optimize edilmiş şekilde şekillendirmenize olanak tanır.

Bir ViewModel'in amacı, tek bir nesnenin oluşturulmasına yönelik görünümdür ve UI mantık kodunun gerekliliğini, aksi takdirde gerekli olan görünümde hafifletir. Bu, görüşün tek sorumluluğu ya da endişesi, tek bir ViewModel nesnesinin, daha temiz bir endişe ayrılmasına (SoC) yardımcı olmaktır. Endişeler, belirli bir amaca (yani, endişeye) sahip olan uygulamanın farklı yönleridir ve bu yönleri ayrı tutmak, uygulamanızın daha organize olduğu ve kodun daha odaklanmış olduğu anlamına gelir. Veri manipülasyon kodunu kendi konumundan görünüm ve kontrolörden uzağa koymak, SoC'yi zorlar.

İlgili konular