2012-12-13 32 views
6

Ben şuna benzer bir WPF uygulama var. Görünüm, görünüm tarafından tetiklenen belirli davranışları ele alan birkaç ICommand nesnesine de bağlıdır. Tek amacı, modeli bir veritabanına kaydetmek olan harici bir ICommand var.WPF, MVVM, iCommand ve depoları

Okuduğum her şey, görünümün veya görünüm modelinin depoya bir başvuruda bulunmaması gerektiğini gösterir. Bu, görünüm modelinin dışında olan Command 3'ün sebebidir.

Soruma iki yönlü. Birincisi, bu makul bir mimaridir ve ikincisi, modelin komut 3'e getirilmesi için iyi bir yoldur, bu yüzden depoya konabilir mi?

+0

VM'de "Komut 1" ve "Komut 2" ile "Komut 3" tam olarak ne demek? Tüm sınıflar kendi sınıflarında ayrı ayrı uygulanmazlar ve sadece VM olarak özelliklerine “eklenirler”. Bu bağlamda, VM'de bir komut ve VM'nin bir başka çıkışı nasıl? –

cevap

8

Kişisel olarak, ViewModel'in depoya bir referansı olmasıyla ilgili hiçbir sorun görmüyorum. Bundan kaçınmaya çalışmak gereksiz komplikasyonlara neden olur.

MVVM'de, ViewModel genellikle Modelinizin üzerinde bulunan "tutkal" katmanıdır - ve Deposu Modelin bir parçasıdır (etki alanına özgü veri/mantığın bir parçasıdır). Benim şahsen bu düşünmek nasıl blog series on MVVM shows a good image:

MVVM Diagram

doğrudan olasılıkla bunu ayırmak için çalışırken daha temiz olurdu VM Command 3 koyarak depoyu ile VM çalışmayı Letting

.

+0

Reed'in söylediklerine birazcık ekleyeyim: İstediğin takdirde depolarınızın ayrıntılarını bir kenara bırakarak bir şekilde onu bir şekilde ayırabilirdiniz. Ama kabul ediyorum, onlara diyagramın gösterdiği yolu tamamen ayırmak için bir sebep yok. – Tim

+0

@Tim İyi nokta. Depo ayrıntılarını soyutlamak çok yararlıdır, ancak neredeyse ayrı bir konu (test edilebilirlik için harikadır). –

+0

Bunun bir tür ayrı bir konu olduğunu kabul ediyorum, fakat bu tür bir soyutlamanın, OP duruşmasının ardında yatan sebeplerden biri olmasının sebebi olabileceğini merak ediyorum. Sadece sormak istedim "iyi o zaman neden kimseye ihtiyacım olmazsa yapmalıyım?" sormadan önce soru! – Tim

0

Görünüm Modeli, doğrudan depoya değil, İş Katmanına (Etki Alanı Nesneleri + Etki Alanı Hizmetleri) iletişim kurmalıdır. Dahası, bu iletişim Komutlar aracılığıyla yapılmalıdır. Yani

sahip:

Görünüm -> Görünüm Modeli -> Komut -> Alan Nesnesi/Alan Adı Hizmeti -> Depo Eğer gerçekten basit CRUD uygulaması geliştiriyor sürece

...