2009-08-17 15 views
5

Bazı MVVM tabanlı WPF kodları geliştirdim ve küçük bir refactoring ihtiyacım var ama bunu yapmadan önce en iyi mimariye karar vermem gerekiyor.MVVM paterni ve yarı küresel veri

Başlangıçta verilerim birkaç benzer (ama ayrı) temsillerini sunabilir bir uygulama ile başladı. Karşılık gelen RecordsView olan RecordsViewModel diyelim. Zaman geçtikçe, ben RecordsViewModel kurucusuna geçirilir ve gözle görülür yayınlanmış bir SettingsViewModel (RecordsView kullanmak için izin) tanıtıldı. SettingsViewModel, değişikliklerin tüm görünümlerime yansıtılmasını sağlayacak şekilde kaydedilir. şimdi iki ayrı manzaraya içerdiğinden

Şimdi RecordsView biraz bölmek istiyorum.

Ben sorundur:

  • yeni (RecordsMainView ve RecordsAlternativeView) hem Ayarları görmek istiyorum. programlı örneği olan RecordsView önceki aksine
  • , bu yeni görünümler Xaml (varsayılan yapıcı) örneklenen.

    1. bir Ayarları
    2. ile bir üst Ayarlar denetimi konusunda bir DependencyProperty olun bulmak için yukarı Ağacı Modeli yürüyün ve Xaml yapmak Mülkiyet katılmak:

Yani benim seçenekleri gibi görünüyor örneği.

  • SettingsViewModel bir Singleton olun.
  • Başka, daha iyi, seçenekler? Hangisini en iyi değerlendirirsiniz?

    cevap

    3

    Ayarlarınızın mantığını bir hizmete (ISettingsService) çeviririm ve hizmetlerin hangisi olduğundan emin olmak için bu hizmete erişmek için servis belirleyicisi veya bağımlılık enjeksiyonu kullanırım.

    Hizmetler, paylaşılan durumu yönetmek için mükemmeldir ve hizmet konumlandırıcı/DI, VM'leriniz için hizmete başvuru almanın çok kolay olmasını sağlar. Paylaşılan durumu bir VM'de saklamak biraz rahatsız edici ve - bulduğunuz gibi - gerçekten ölçeklenmiyor. İyi bir kural, VM'deki durumun sadece ilgili görünümü desteklemesi için var olup olmadığını veya diğer bileşenlerin bu duruma erişmeye ihtiyacı olup olmadığını sormak olabilir. İkincisi, bir servise taşıyın.