5

Yeni bir mvvm-wpf uygulaması başlatırken, genellikle başlangıçta mvvm-light'i dahil ediyorum. Bu uygulama gelişene kadar iyi çalışıyor.Standart ViewModelLocator, MvvmLight ve AntiPattern'ten mi geliyor? Ve bunu nasıl hafifletiriz?

Bazı yerlerde ViewModelLocator devasa (her türlü ChildViewodel için birçok ViewModels) devasa hale gelir. Ve hatta tavşan deliğinden aşağıya aynı görüntü modelinin birden fazla farklı örneğine ihtiyacım var. (örn. aynı ekranda etkileşimde bulunmak isteyen öğeler için). Mücadelenin başladığı yer burası, bu kadar iyi nasıl idare edilir, sürekli olarak kodun test edilebilirliğini korur mu?

Bu nedenle, ViewModelLocator'dan kurtulmak istiyorsanız (ViewLinktor gibi bir antipattern? Bir ServiceLocator gibi hissediyor) ViewModel ilkine geçmeli ve tüm ViewModel'ler için (çok sayıda) soyut fabrika oluşturmalı mıyım?

cevap

0

ViewModelLocator, Inversion of Control (IoC) için kullanılan bir Gezinme Veriyolu için süslü bir addır. Bu daha yeni bir teknoloji gibi görünse de, bir gezinme otobüsü gerçekten bir Servis Veriyolu'nı farklı bir şekilde kullanıyor. Statik (VB'de paylaşılmış) kapsayıcınız varsa, anti-desen değildir. Kaplamayı ViewModels'inizde geçiriyorsanız anti-pattern gelir.

MVVM'de akılda tutulması gereken şey, çok yönlü bir tasarım deseni olması ve onu birçok yönden genişletebilmenizdir. Büyük projeler için en iyi çözüm, bileşen tasarımıdır (uygulamanızın her özelliğinin kendi ad alanı veya projesinde yer aldığı bir tasarım).

bir tasarım şeması şöyle görünebilir:

  • Müşteri
    • Modelleri
    • ViewModels
    • Hizmetler
  • Siparişler
    • Modelleri
    • ViewModels
    • Hizmetler

vs ... Gerçekten geliştiricinin lezzet aşağı gelir. Tasarımınız tutarlı olduğu sürece.

Daha fazla bilgi için: ViewModelLocator öğesinin daha iyi anlaşılması için Gezinme Otobüsünü ara. EventAggregator'ı daha iyi anlamak için, Message Bus

için arama yapın.
İlgili konular