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.
1 answers
Podstawowe użycie MVVM-Light
- Uruchom DispatcherHelper w aplikacji.funkcja Application_Startup pliku cs
- Tworzenie ViewModels z BaseClass
- zawsze twórz klasę ViewModelLocator, która zawiera wszystkie modele widoku i jest powiązana z zasobami aplikacji
- Użyj polecenia RelayCommands, aby wyświetlić funkcje w widoku Dowiedz się, kiedy używać DispatchHelper.
Pomysły Na Sprzątanie:
- w razie potrzeby dodaj do swojego ViewModel, aby wyczyścić EntitySet DomainContext w Cleanup ()?
- 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:
- Abstract the Service / Implementacje zapytań do interfejsu.
- Utwórz 2 klasy dla każdej klasy implementacji Usług (1 dla projektu, 1 dla produkcji)
- 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.
- Użyj zmiennej statycznej do przechowywania DomainContext w klasie Implmentacji usługi.
- 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:
- Dodaj logikę biznesową najpierw w modelu, a następnie w modelu widoku.
- Użyj częściowych metod modelu, aby dodać logikę dla odpowiednich zdarzeń zmiany / aktualizacji.
- Dodaj właściwości tylko do odczytu (tylko getter), aby dostarczyć podsumowanie i obliczone wartości w modelu.
Dla Odsłon:
- Zawsze Powiąż root z obiektem lokalizującym.
- 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:
- Użyj CollectionViewSource dla kolekcji w swoich modelach widoku, ze źródłem EntitySet Domaincontext
- Zastosuj całą logikę filtrowania, sortowania i grupowania do źródła CollectionViewSource w modelu widoku. Po Wezwaniu, Zadzwoń .Widok.Refresh() na obiektach CollectionViewSource, jeśli jest to konieczne do aktualizacji interfejsu użytkownika.
Dla ViewModel coordination (Controller Logic)
- używaj wiadomości oszczędnie, zbyt duża złożoność może być trudna do zarządzania.
- Użyj klas NotificationMessage i PropertyChangedMessage do wysyłania/odbierania.
Dla DomainServices RIA:
- zaimplementuj wszelkie logowanie w funkcji persist changes, A nie logikę Aktualizuj/Wstaw / Usuń.
- 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:
- 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.
- tworzenie testów jednostkowych w Silverlight w celu weryfikacji dodanego modelu / logiki biznesowej
- Tworzenie projektu testów jednostkowych do testowania logiki po stronie serwera i functions
For Entity Framework:
- Zachowaj dopasowanie 1 do 1 EntitiesContext do usługi domeny. Próba podzielenia tego w inny sposób powoduje problemy.
- 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.
- 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
- 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.
- Utwórz dodatkowy kontekst, aby znaleźć bieżące wartości podczas logiki aktualizacji/integracji.
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