MVVM-najlepsze praktyki usług light + Ria [zamknięte]

Chciałbym rozpocząć zbiór najlepszych praktyk MVVM-light (w/ RIA Services). Istnieje wiele elementów, które uznałem za pomocne najlepsze praktyki lub najlepsze podejścia, ale chciałbym usłyszeć od innych za pomocą zestawu narzędzi MVVM-light i zobaczyć, co również znaleźli.

Proszę opublikować swoje najlepsze praktyki jako odpowiedzi na to pytanie.

Author: Ryan from Denver, 2010-08-05

1 answers

Podstawowe użycie MVVM-Light

  1. Uruchom DispatcherHelper w aplikacji.funkcja Application_Startup pliku cs
  2. Tworzenie ViewModels z BaseClass
  3. zawsze twórz klasę ViewModelLocator, która zawiera wszystkie modele widoku i jest powiązana z zasobami aplikacji
  4. Użyj polecenia RelayCommands, aby wyświetlić funkcje w widoku
  5. Dowiedz się, kiedy używać DispatchHelper.

Pomysły Na Sprzątanie:

  1. w razie potrzeby dodaj do swojego ViewModel, aby wyczyścić EntitySet DomainContext w Cleanup ()?
  2. wywołaj funkcję CleanupSomeVM () swojego Viewmodellocatora, aby wyczyścić viewmodele, gdy nie są już aktywnie potrzebne w aplikacji.

chciałbym usłyszeć od innych o tym, kiedy/jak używasz funkcji czyszczenia. Wraz z rozwojem mojej aplikacji czuję potrzebę dodania kilku funkcji czyszczenia, aby lepiej zarządzać zużyciem pamięci klienta.

Dla Mieszalności:

  1. Abstract the Service / Implementacje zapytań do interfejsu.
  2. Utwórz 2 klasy dla każdej klasy implementacji Usług (1 dla projektu, 1 dla produkcji)
  3. wewnątrz każdego modelu ViewModel, zaimplementuj własną klasę usług (użyj IsInDesignMode), aby w razie potrzeby utworzyć implementacje usług z możliwością mieszania.
  4. Użyj zmiennej statycznej do przechowywania DomainContext w klasie Implmentacji usługi.
  5. Dodaj DispatcherHelper.Initialize () w konstruktorze ViewModels, ale tylko w trybie projektowania. Mieszanka nie ładuje aplikacji podczas ładowania strony, a to działa wokół tego.

Do Dodania Logiki Biznesowej:

  1. Dodaj logikę biznesową najpierw w modelu, a następnie w modelu widoku.
  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 getter), aby dostarczyć podsumowanie i obliczone wartości w modelu.

Dla Odsłon:

  1. Zawsze Powiąż root z obiektem lokalizującym.
  2. Spróbuj zachowaj logikę kodu do układu lub niestandardowej logiki interfejsu użytkownika. Unikaj odwoływania się do swojego modelu widoku.

Dla Zbiorów:

  1. Użyj CollectionViewSource dla kolekcji w swoich modelach widoku, ze źródłem EntitySet Domaincontext
  2. Zastosuj całą logikę filtrowania, sortowania i grupowania do źródła CollectionViewSource w modelu widoku.
  3. Po Wezwaniu, Zadzwoń .Widok.Refresh() na obiektach CollectionViewSource, jeśli jest to konieczne do aktualizacji interfejsu użytkownika.

Dla ViewModel coordination (Controller Logic)

  1. używaj wiadomości oszczędnie, zbyt duża złożoność może być trudna do zarządzania.
  2. Użyj klas NotificationMessage i PropertyChangedMessage do wysyłania/odbierania.

Dla DomainServices RIA:

  1. zaimplementuj wszelkie logowanie w funkcji persist changes, A nie logikę Aktualizuj/Wstaw / Usuń.
  2. podczas funkcji Insert, Update,Delete, jeśli musisz odwołać się do innego podmiotu za pomocą właściwości Navigation, albo sprawdź najpierw Status uprawnień lub załaduj encję z innego kontekstu, aby zapobiec konfliktom statusu uprawnień.

Do Debugowania / Testowania:

  1. Sprawdź okno wyjściowe pod kątem błędów wiązania i napraw je. Błędy wiązania nie są ciche dla użytkownika, ale obniżają wydajność aplikacji i oczekiwane zachowanie.
  2. tworzenie testów jednostkowych w Silverlight w celu weryfikacji dodanego modelu / logiki biznesowej
  3. Tworzenie projektu testów jednostkowych do testowania logiki po stronie serwera i functions

For Entity Framework:

  1. Zachowaj dopasowanie 1 do 1 EntitiesContext do usługi domeny. Próba podzielenia tego w inny sposób powoduje problemy.
  2. nie używaj atrybutu [Composition], chyba że w pełni zamierzasz poświęcić dużo czasu na uważne budowanie logiki wstawiania,aktualizowania i usuwania.
  3. Użyj oddzielnej usługi do obsługi niestandardowych typów z powrotem do Klienta RIA. Nie dodawaj ich do usługi DomainService dla obiektu EntityFramework
  4. Wykonaj Logika aktualizacji/integracji po stronie serwera (taka jak aktualizacja innych systemów) w funkcji PersistChangeSet, a nie w funkcjach Insert, Update, Delete. Zapobiegnie to przypadkowemu wciągnięciu elementu za pomocą właściwości nawigacji, co spowoduje, że wersja odłączona nie zostanie zaktualizowana.
  5. Utwórz dodatkowy kontekst, aby znaleźć bieżące wartości podczas logiki aktualizacji/integracji.
 25
Author: Ryan from Denver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-11 19:38:00