lisahampel / nx-workspace

0 stars 0 forks source link

Ngxs Probleme #1

Open homj opened 3 years ago

homj commented 3 years ago

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. Der State selbst empfängt die Actions und definiert die Selektoren, die von der Facade genutzt werden. Er kann deshalb schonmal die Facade gar nicht als Dependency haben, da du sonst eine circular dependency hättest. Der State spricht stattdessen ggf. mit einem Service, 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 dem RecipeService 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 den RecipesService anstatt der RecipeFacade. 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 der RecipeState ist komplett auskommentiert.

lisahampel commented 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..

lisahampel commented 3 years ago

Allgemeiner Commit zu diesem Issue: https://github.com/lisahampel/nx-workspace/commit/a25009193e391582cebbfe96918f1629a9adf6d0