2010-08-05 31 views
15

Chciałbym rozpocząć zbiór najlepszych praktyk MVVM (w/RIA Services). Istnieje wiele pozycji, które uznałem za pomocne najlepsze praktyki lub najlepsze metody, ale chciałbym usłyszeć od innych użytkowników przy użyciu zestawu narzędzi MVVM-light i zobaczyć, co oni również znaleźli.Najlepsze praktyki w zakresie MVVM-light + RIA

Podaj swoje najlepsze praktyki jako odpowiedzi na to pytanie.

+3

Rozważ przekształcenie tego na wiki społeczności, aby każdy mógł edytować. –

+0

Nie uważam tego za com-wiki. Pytający zasługuje na reputację tego dobrego pytania. – Shimmy

Odpowiedz

25

Podstawy używania MVVM-Light

  1. Intialize DispatcherHelper w funkcji Application_Startup danego pliku App.cs za
  2. Tworzenie ViewModels z klasy bazowej
  3. Zawsze Utwórz klasę ViewModelLocator, który zawiera wszystkie Państwa zdanie modele i jest połączony w aplikacji Zasoby
  4. Użyj funkcji RelayCommands, aby odsłonić funkcje widoku
  5. Dowiedz się, kiedy należy korzystać z DispatchHelper.

Clean-Up Pomysły:

  1. W razie potrzeby, dodać do swojej ViewModel wyczyścić DomainContext za EntitySet na Cleanup()?
  2. Zadzwoń do funkcji CleanupSomeVM() ViewModelLocator, aby wyczyścić viewmodels, gdy nie są już aktywnie potrzebne w aplikacji.

Chciałbym usłyszeć od innych o tym, kiedy/jak korzystać z funkcji CleanUp. Wraz z rozwojem mojej aplikacji czuję potrzebę dodania funkcji czyszczenia, aby lepiej zarządzać wykorzystaniem pamięci klienckiej.

Dla Blendability:

  1. streszczenie Wdrożenia życzenie/zapytanie do interfejsu.
  2. Utwórz 2 klasy dla każdej klasy implementacji usług (1 dla projektu, 1 dla produkcji).
  3. W każdym modelu ViewModel należy wdrożyć własną klasę usług (używając IsInDesignMode), aby w razie potrzeby utworzyć implementacje usługi Blendable Service.
  4. Użyj zmiennej statycznej, aby zatrzymać obiekt DomainContext w klasie Implmentacja usługi.
  5. Dodaj DispatcherHelper.Initialize() w konstruktorze ViewModels, ale tylko w trybie projektowania. Blend nie ładuje aplikacji podczas ładowania strony, a to działa.

dla dodatkowej logiki biznesowej:

  1. Dodaj działalności logikę w modelu, potem w ViewModel.
  2. Użyj częściowych metod modelu, aby dodać logikę dla odpowiednich zdarzeń zmiany/aktualizacji.
  3. Dodaj właściwości tylko do odczytu (tylko pobierający), aby podać sumaryczne i obliczone wartości w modelu.

Dla Wyświetleń:

  1. Zawsze Bind korzeń do obiektu Locator.
  2. Staraj się utrzymywać logikę kodową tylko do układu lub niestandardowej logiki interfejsu użytkownika. Unikaj odwoływania się do swojego ViewModel.

kolekcje:

  1. Zastosowanie CollectionViewSource dla kolekcji w swoim ViewModels, ze źródłem DomainContext za EntitySet
  2. Zastosuj wszystko Filtrowanie, sortowanie i grupowanie Logic do CollectionViewSource w Twojej ViewModel.
  3. Po ServiceCalls, wywołaj .View.Refresh() na swoich obiektach CollectionViewSource, jeśli jest to konieczne, aby zaktualizować interfejs użytkownika.

Dla ViewModel koordynacji (Logic Controller)

  1. używać funkcji wiadomości oszczędnie, za dużo złożoność może być trudna do opanowania.
  2. Użyj klas NotificationMessage i PropertyChangedMessage do wysyłania/odbierania za pomocą.

Dla RIA DomainServices:

  1. realizacji wszelkich zalogowaniu funkcji utrzymują się zmienia, a nie aktualizacja/insert/delete logiki.
  2. Podczas wstawiania, aktualizowania i usuwania funkcji, jeśli chcesz odwołać się do innego elementu za pośrednictwem właściwości nawigacji, najpierw sprawdź element EntityStatus lub załaduj obiekt z innego kontekstu, aby zapobiec konfliktom EntityStatus.

do debugowania/testowania:

  1. Sprawdź okna wyjściowego do wiązania błędy i je naprawić. Błędy wiązania nie działają w sposób dyskretny dla użytkownika, ale pogarszają wydajność aplikacji i oczekiwane zachowanie.
  2. Tworzenie testów jednostek w Silverlight do zweryfikowania wszelkich dodanych modelu/logiki biznesowej
  3. Tworzenie projektu jednostki testowej do testowania logiki po stronie serwera i funkcji

Dla Entity Framework:

  1. Przechowywać 1- do-1 Dopasowanie encji do usługi domenowej. Próba podziału w inny sposób powoduje problemy.
  2. NIE używaj atrybutu [Kompozycja], chyba że zamierzasz poświęcić dużo czasu na staranne budowanie logiki wstawiania, aktualizacji i usuwania.
  3. Użyj osobnej usługi do obsługi niestandardowych typów z powrotem do klienta RIA. Nie dodawaj ich do swojej usługi DomainService dla obiektu EntityFramework Obiekt
  4. Wykonuj po stronie serwera logikę aktualizacji/integracji (taką jak aktualizacja innych systemów) w funkcji PersistChangeSet, a nie w funkcjach wstawiania, aktualizacji, usuwania.Zapobiegnie to przypadkowemu wciągnięciu podmiotu za pośrednictwem właściwości nawigacji, co spowoduje, że twoja wersja nie zostanie zaktualizowana.
  5. Utwórz dodatkowy kontekst, aby znaleźć bieżące wartości podczas aktualizacji/integracji.