Właśnie zaczynam się uczyć o architekturze Redux (z Angular 2).
Czy dobrze to rozumiem wszystko wchodzi w jeden Obiekt, który określa stan całej aplikacji?
Jeśli tak, powiedz, że chcę zbudować średniej wielkości aplikację, taką jak panel administracyjny i nie znam jeszcze wszystkich właściwości / stanów.
Odpowiedzi:
1 dla odpowiedzi № 1Czy dobrze to rozumiem wszystko wchodzi w jeden Obiekt, który określa stan całej aplikacji?
To nie jest całkowicie poprawne. - To jest technicznie możliwe, ale nie zalecane.
Dane są zazwyczaj agregowane w mniejsze fragmenty z zależnościami semantycznymi reducers
- jeśli spojrzysz na ngrx-example-app - masz następujące reducers
(możesz do nich zadzwonić „pod-państwa”):
- książki -> zawiera wszystko związane z książką
- kolekcje -> zawiera wszystko związane z gromadzeniem książek
- układ -> wszystko związane z układem (jeśli panel boczny jest otwarty lub zamknięty)
- Szukaj -> wszystko związane z wyszukiwaniem
Teraz technicznie każdy reducer
jest umieszczany w globalnym obiekcie magazynu (na wypadek, gdybyś miał na myśli to przezjeden Object ”), ale to tylko dla wygody reducer
musi być zbudowany jako „samodzielny komponent” bez wiedzy innych reducers
i stwierdza.
Podsumowując: użyj wielu reducers
, nie jeden duży.
[...] powiedz, że chcę zbudować średniej wielkości aplikację, taką jak panel administracyjny i nie znam jeszcze wszystkich właściwości / stanów.
Zależy to od typowej zawartości aplikacji reducers
dla panelu administracyjnego może być:
- użytkowników -> dane użytkownika
- konfiguracja -> ogólne dane związane z konfiguracją
- wsparcie -> np. na prośby o wsparcie od użytkowników
- układ -> rzeczy związane z układem
Teraz to jest po prostu jeden sposób definiowania reduktorów, jest ich mnóstwoaplikacji, w których lepiej nie dzielić reduktorów na logikę biznesową, ale według innych kryteriów. ngrx to tylko narzędzie - będziesz nadal musiał myśleć!
O aktualizowaniu interface
i initialState
, Nie widzę powodu, dla którego miałoby to stanowić problem - po prostu dodaj nowe pola, zaimplementuj reducer-cases
a ty „skończyłeś (z implementacji wyświetlacza w niektórych komponentach itp.).