2010-08-30 32 views
7

İlk defa MVVM desenini izleyerek bir WPF uygulaması yazmayı planlıyorum ama bir şey bana açık değil. Görünümün "Kaydet" düğmesine sahip olduğunu varsayalım ve bu vurulduğunda veriimin mevcut durumunu (model) kaydetmem gerekiyor. Bu bir SOAP servisine SOAP mesajı göndererek yapılacaktır.WPF MVVM servis katmanı

MVVM kurulumumda bu SOAP isteği/yanıt işleyicileri nerede yaşıyor? Görünüm, kaydetme düğmesine her basıldığında SOAP aramasını kendisi yapar mı? Görünüm modeli, modeli kendisini kaydetmek için uyarır mı? Belki de MVVM'den tamamen farklı bir yol var mı?

Düşüncem, geçerli kaydetme isteği tamamlanana kadar görünümdeki kaydetme düğmesini devre dışı bırakması gerektiğinden, görünüm modelinin bunu ele alacağıydı (en azından bu durumda).

+0

Bir cevap yazmaya başladım ve daha sonra kendimden konuştum ve bunun yerine +1'le konuştum. Çoğu ViewModels Modelin bir DataContext'i kullandığından, bu modelin üstesinden gelmesi, içgüdüselliğimdir, ancak bu modelin kendisini gerçekten güncellememektedir. –

cevap

5

Genellikle viewmodel ve SOAP/WCF/Webservice katmanı arasında mantıksal istemci tarafı uygulama/iş katmanı yerleştiririm. Bu katman, görünmeyen tüm iş mantığı ve işlem mantığının yaşadığı yerdir. Unutmayın, viewmodel, alanın modelini değil, görünümün modelidir. Bu nedenle, ASAP aşağı bir sonraki katmana denetimini bırakmak istersiniz.

Bu senaryoda, görünümün, görünüm katmanında bir kaydetme komutunu tetiklemesini isterdim; bu da uygulama katmanına çağrı yapacak ve bu da uzak servislere yapılan çağrıları yapacaktı.

4

ViewModel, böyle bir işlem yapmamalıdır. Sadece tetiklemeli. Bu nedenle model bunu yapmak zorundadır (veya LoadModel'in kendisinden değil, yük ve kayıt işlemlerinden sorumlu başka bir ara katman).

ViewModel, kayıt işlemlerini gözlemleyebilir ve Görünümün ilerlemesi hakkında durum bilgisi sağlayabilir.

0

ViewModel tarafından erişilebilen bir hizmet işleyicisi oluşturur. Bunu viewmodel'in yapıcısına aktarın ve servis işleyicisinin maruz kaldığı yöntemleri arayın.