Open homj opened 3 years ago
Die angesprochenen Punkte zu
hab ich ausgebessert.
was den Punkt Subjects in Facade, State und Service angeht, habe ich Probleme damit, das startedEditing-Subject zu ersetzen. Da stehe ich irgendwie auf dem Schlauch..
Allgemeiner Commit zu diesem Issue: https://github.com/lisahampel/nx-workspace/commit/a25009193e391582cebbfe96918f1629a9adf6d0
Bei Ngxs sind noch einige Probleme, die du beheben musst:
Die Facade darf nicht im Store genutzt werden!
Das haben wir schon ein paar mal besprochen: Die
Facade
dient als öffentlich sichtbare Fassade eines Features und übernimmt Aufgaben wie Actions dispatchen und State selektieren. DerState
selbst empfängt die Actions und definiert die Selektoren, die von derFacade
genutzt werden. Er kann deshalb schonmal die Facade gar nicht als Dependency haben, da du sonst eine circular dependency hättest. DerState
spricht stattdessen ggf. mit einemService
, der die eigentliche Arbeit verrichtet.https://github.com/lisahampel/nx-workspace/blob/c3d3870f3919188c015565f33ddc5de8214be962/bynary/libs/angular/shopping-list/src/lib/state/shopping-list.state.ts#L35
Subjects in Facade, State und Service
Du nutzt in
ShoppingListFacade
,ShoppingListState
,ShoppingListService
und demRecipeService
Subjects:https://github.com/lisahampel/nx-workspace/blob/c3d3870f3919188c015565f33ddc5de8214be962/bynary/libs/angular/shopping-list/src/lib/services/shopping-list.facade.ts#L12 https://github.com/lisahampel/nx-workspace/blob/cfcff45ff4fcbba788ac7fc028178533d989f6de/bynary/libs/angular/shopping-list/src/lib/state/shopping-list.state.ts#L27 https://github.com/lisahampel/nx-workspace/blob/cfcff45ff4fcbba788ac7fc028178533d989f6de/bynary/libs/angular/shopping-list/src/lib/services/shopping-list.service.ts#L7 https://github.com/lisahampel/nx-workspace/blob/c3d3870f3919188c015565f33ddc5de8214be962/bynary/libs/angular/recipes/src/lib/services/recipes.service.ts#L9
Du umgehst mit diesen Subject das eigentliche Grundprinzip von Redux: Ein immutable State, der immer nur einzeln und inkrementell verändert werden kann und diese Änderungen in Form eines Streams bereitstellt. Die Subjects selbst sind eine eigene Form von State, der vollkommen losgelöst von dem Redux-State ist und jederzeit beliebig - auch von außen - geändert werden kann.
Du nutzt diese Subjects dann auch in den Components:
https://github.com/lisahampel/nx-workspace/blob/d5cc26596a7b59df9f0c15c1be273061e3b60fb9/bynary/apps/demo/src/app/core/feature/shopping-list/shopping-list.component.ts#L29 https://github.com/lisahampel/nx-workspace/blob/c3d3870f3919188c015565f33ddc5de8214be962/bynary/apps/demo/src/app/core/feature/shopping-list/shopping-list-edit/shopping-list-edit.component.ts#L32 https://github.com/lisahampel/nx-workspace/blob/cfcff45ff4fcbba788ac7fc028178533d989f6de/bynary/apps/demo/src/app/core/feature/recipes/recipes-list/recipes-list.component.ts#L27
Service in Component
in der
AngularRecipesListComponent
nutzt du denRecipesService
anstatt derRecipeFacade
. Auch hier nochmal: es ist fundamental wichtig, dass du die Aufgaben strikt trennst. Die Components sprechen mit Facades. Die wiederum schicken Actions an den State, der daraufhin den Service called.Fehlende Implementierung
RecipeFacade
&RecipeState
Die
RecipeFacade
hat nur leere Methoden mit fehlender Implementierung. Und derRecipeState
ist komplett auskommentiert.