Staramy się wymyślić walidację w mvvm przeprowadzając walidację w logice biznesowej lub modelu. mam wdrożony zatwierdzić typu wyjątku w naszej logiki biznesowej - uproszczony schemat można znaleźć tutaj: MVVM - Walidacja
Jeśli mamy partii wejść, które są od siebie niezależne, nie ma problemu, wyjątek jest wyrzucany, pole tekstowe przechwytuje go jako znak, że graniczy z czerwonym dla każdego błędnego wejścia. Jednak gdy mamy wartości zależne, mamy kłopoty. np.
Value1 i WartoÊç2 w modelu nie muszą być takie same, więc mamy funkcję sprawdzania poprawności w każdym z tych, którzy szukają wartości równa się i rzucić wyjątek, jeśli tak się stanie
teraz jeśli ustawimy wartość 1 na 0 i wartość 2 na 1 wszystko będzie dobrze
Wartość 1 zostanie ustawiona w GUI na 1 -> ta zostanie zaznaczona na czerwono, ponieważ sprawdzanie poprawności innych wartości nie zostanie uruchomione, więc wartość 2 w GUI nie jest oznaczone jako wadliwe
WartoÊç2 zostanie ustawiona na 2 w GUI, teraz doszliśmy poprawny stan, ale tylko WartoÊç2 zostanie potwierdzone, więc Value1 nadal jest oznaczony jako uszkodzony
Czy istnieje wspólny wzór, aby rozwiązać ten problem? nie chcemy wprowadzać zależności w GUI między dwoma polami tekstowymi, ponieważ logika ta powinna być obecna tylko w warstwie logiki biznesowej.
Zamiast wdrażania zatwierdzić wyjątku można też zaimplementować interfejs IDataErrorInfo, ale problem nadal istnieje, nie ma sposobu, aby zmusić zależności od wartości ponownie potwierdzić swoje wartości, przynajmniej nie widzę :)
Każda pomocy ocenia się
cheers, manni
[czyszczenia, usuwa unecessary krok]
15.11.2010 - Part2
ok, duży przemyślane tutaj, jedziemy z businesslogic kondygnacji. tutaj jest nasza obecna planowana konfiguracja: (obraz jest nieco mały skalowany tutaj, proszę otworzyć go w osobnym oknie, aby pokazać go w pełnym rozmiarze) wszystko jest mniej lub bardziej wyraźne, z wyjątkiem tego, jak powiadomić wszystkie modele widoków/modeluj klony różnych edytorów, jeśli zmieni się model danych w ramach logiki biznesowej. jednym ze sposobów jest śledzenie sklonowanych modeli w logice biznesowej, która je tworzy. Gdy model danych zostanie zmieniony przy użyciu logiki biznesowej commit(), wszystkie inne zarejestrowane klony modelu mogą zostać powiadomione o zmianach i dalej je propagować. Ewentualnie logika biznesowa może opublikować wydarzenie, do którego subskrybowane są wszystkie modele widokowe, aby również mogły one uzyskać zmiany - czy ktoś mógłby dać mi wskazówkę, co jest lepsze?
Jeszcze raz dziękuję za pomoc, przepraszam, że jestem tak umysł zablokowany;)
Dlaczego wartości właściwości ustawienia maszyny wirtualnej znajdują się w warstwie biznesowej? To wydaje się być przyczyną niektórych twoich problemów. Wydaje się, że wszyscy (jak się wydaje) mają nieco inną interpretację tego, co oznacza MVVM, ale model IMHO jest kombinacją modelu danych i kontrolera, więc posiada nadzbiór danych w VM i koordynuje dostęp do usług sieciowych/repozytoriów/etc . Tak więc istniejąca warstwa biznesowa powinna zostać włączona do bieżącego modelu lub ewentualnie przeniesiona do modelu po (na przykład po drugiej stronie granicy WCF). – slugster
Myślimy o zwijaniu modelu (który jest naszym modelem danych) i BusinessLogic w jedną warstwę, co w istocie oznacza to, co rozumiem poprawnie. ale nadal myślę, że vm nie powinien zawierać sprawdzania poprawności. Ale nadal problem z przekazywaniem ciągów trwa. Przesuwając logikę biznesową na drugą stronę granicy wcf, czy oznacza to, że cały model jest po prostu niemym posiadaczem danych, który może być edytowany i jest przesyłany jako całość do logiki biznesowej i tam oceniany? czy masz jakieś linki dotyczące korzystania z granicy wcf i podziału? dzięki za pomoc – manni
Absolutnie dokonujesz sprawdzenia poprawności w maszynie wirtualnej, ale jest to prosta walidacja, np. * Hasło jest dłuższe niż 6 znaków * lub * adres e-mail jest prawidłowy *. Możesz oddzielić swoją logikę biznesową od modelu, rozważ użycie metody n-warstwy dla modelu-> logiki biznesowej-> repozytorium danych (często BL i warstwy danych są włączone do usługi internetowej, ale nie musi to być, jeśli korzystasz tylko z lokalnej bazy danych). Posiadanie BL w modelu jest nadal lepszym rozwiązaniem niż to, co obecnie masz. – slugster