2009-05-29 21 views
6

Birisi MVVM desen için "iki büyük silahlar" 1) ekli davranışları ve 2) hizmetler olduğunu bir answer to a stackoverflow question içinde anlattı.Tam olarak "WPF servisleri" nelerdir?

PresentationFoundation.dll WPF destek bağlayıcı tipleri, animasyon ve multimedya desteği, veri kontrolleri tanımlar ve diğer: Bence "WPF servisleri" Bir ben şu şekillerde kullanılabilir bulundu ifade aracı olduğunu kabul WPF hizmetleri. Bu WPF hizmetler (de-birleştiğinde eventing, zengin veri bağlama, şekillendirme, kaynak, vs.)

Birçok tek bildirim UI yığınında yakınsama yazılım geliştirme en iyi uygulamalardır.

Sen, WPF arkasındaki motivasyon anlamıyoruz XAML sözdizimi öğreneceksiniz, çekirdek programlama modeli incelemek ve birkaç WPF servisleri anket. Ben gibi, bu yüzden anlamına gelen bu sadece bir sözcük bile söz "WPF servisleri" var WPF kitapların

Yok "WPF özellikleri" vb ayrılmış eventing, zengin veri bağlama, şekillendirme, ya da "WPF Hizmetleri" teriminin arkasında başka bir şey var mı?

+0

Evet, özelliklerle ilgili. Bu bağlamda, “hizmetler” in daha iyi ses çıkarması için bir vızıltı kelimesi olduğunu söyleyebilirim. Tıpkı "kullanıcı deneyimi" ve benzerleri gibi. – Botz3000

cevap

3

WPF hizmetlerinden değil, uygulama hizmetlerinden söz etmiyor. Yani, işlevin bir kısmını birden fazla VM'nin tüketebileceği bağımsız bir servise soyutlamaktır.

+0

Tam olarak ne demek, Windows Hizmeti, Web Hizmeti hakkında mı konuşuyorsunuz? WPF üzerinde wikipedia makale "kullanıcı arayüzü, 2D ve 3D çizim, sabit ve adaptif belgeler, gelişmiş tipografi, vektör grafikleri, raster grafik, animasyon, veri bağlama, ses ve video" olarak "WPF uygulama hizmetleri" örnekler verir. Bu ne demek ki o zaman "çoklu ViewModels veri bağlama tüketebilir". Bu her zaman böyle. Bu anlamda "WPF servisleri" ve "uygulama hizmetleri" nin ardında ne var? Yoksa "güvenlik hizmetleri" gibi klasik anlamda mı demek istiyorsun? –

+3

"Hizmet" ile, sadece bir parça işlevin üzerindeki bir soyutlamayı kastediyorum. Belki de temel işlevi bir COM bileşeni veya veritabanı erişimi veya her neyse. Önemli değil - Sanal makine sadece bu işlevsellik ile etkileşimde kullanabileceği bir arayüzden haberdar. –

13

Martin Fowler, Dependency Injection makalesinde yayınlanan bir hizmete dair bir açıklama içeriyor. Basitçe ifade edersek, bir servis diğer nesneler tarafından kullanılmak üzere işlevsellik sağlayan bir nesnedir. Inversion of Control ve Service Locator desenlerini ele alırken yoğun olarak kullanılan terimi bulacaksınız.

Bu konuyu elinizin altında tutarak, MVVM deseninde bir mesaj kutusu nasıl görüntülediğimizi düşünelim. MessageBox.Show() çağırmak kötü olurdu, Ray. Bu, ViewModel'i UI mimarisine sıkı sıkıya bağlar ve ViewModel'in test edilmesini zorlaştırır. Bunun yerine, bir çözüm, IDisplayMessage adını vereceğimiz bir hizmeti kullanmak olacaktır. Bu hizmet ViewModel'e bir şekilde (yukarıdaki iki modelden biriyle) sağlanır ve bu servis bir mesajı "görüntülemek" için kullanılır. Normal çalışma sırasında, bu servisin somut bir versiyonu MessageBox.Show() çağırır, ancak test sırasında farklı davranan farklı bir somut versiyon (bir test çifte) sağlayabiliriz (genellikle bir noop veya ViewModel görüntülerini sağlıyoruz) Mesaj, aramayı kaydeden bir sürüm olduğunu, böylece oluştuğunu iddia edebiliriz). Onyx (yasal uyarı: Ben yazarım) böyle bir hizmet ve bu hizmeti (ve diğerleri) ViewModel'e sağlamak için gereken altyapıyı sağlar.

Güncelleme: Bu yanıt yapıldığı için, oldukça iyi bir konu olan Services: Your ViewModel Deathstar bir blog yazısı yazdım. Bu, yazıların bir "dizisi" nin parçasıydı ve okuyucular da Behavior - Your Trusty ViewModel Bazooka numaralı ilk gönderiyle ilgilenebilirler.

+1

Neden makalelerinize işaret etmiyorsunuz? Ekli Davranışlar: http://wekempf.spaces.live.com/Blog/cns!D18C3EC06EA971CF!940.entry Hizmetler: http://wekempf.spaces.live.com/Blog/cns!D18C3EC06EA971CF!951. zamanda giriş – Trainee4Life

+0

, makale yoktu ve sadece buraya gelmek ve tepkisini güncellemek için düşünmüyordu. – wekempf