Czy Redux używa wzorca oczyszczonego obiektu Boga?


15

Podczas uczenia się o Redux, przyszedł mi do głowy wzorzec Bóg-obiekt (lub anty-wzór) - oba mają jeden duży obiekt zawierający wszystkie dane aplikacji i metody ich manipulowania. Ale Redux wprowadził pewne ograniczenia, takie jak uczynienie Object niezmiennym i zdarzeń czystymi funkcjami utrzymującymi ścisłą sygnaturę.

Pojawiło się więc pytanie, czy Redux używa zdezynfekowanej wersji obiektu Boga? A może jest coś wspólnego z tym, że JavaScript nie jest klasycznym silnie napisanym OOP?


2
Krótka odpowiedź: nie. Długa odpowiedź (właściwie pytanie, które powinno prowadzić do odpowiedzi): czy baza danych jest klasą? A może system plików? A może pamięć podręczna? Czy te wszystkie wzory Boga też?
code4life

IMO tak to jest. Jest to pierwsze stwierdzenie o Redux: „Ponieważ wymagania dotyczące aplikacji jednostronicowych JavaScript stają się coraz bardziej skomplikowane, nasz kod musi zarządzać większą liczbą stanów niż kiedykolwiek wcześniej”. - oznacza to, że musisz zarządzać stanem swojej aplikacji jako jednego obiektu blob. Myślę, że jest to problem specyficzny dla aplikacji internetowych i stworzony przez ubogie / nigdy nie zaprojektowane do tego frameworki, które są używane do wdrażania aplikacji internetowych.
n13

@ n13: Tylko dlatego, że jest dostępny ze scentralizowanej lokalizacji, nie oznacza, że ​​jest to zatem jeden ogromny obiekt blob. Na przykład dostęp do mojej bazy danych jest scentralizowany ( DbContext), ale jej dane wewnętrzne są podzielone na mniejsze części (tabele, schematy).
Flater,

@ Później duży obiekt blob z wieloma poddziałami jest nadal dużym obiektem blob. Prosty stary model OO przedziałuje wszystkie dane według potrzeb, co oznacza, że ​​każdy obiekt zajmuje się bardzo małą ilością stanu / danych i wszystko jest dość proste. Możesz także przechowywać wszystko w jednej wielkiej globalnej strukturze, ale nie robisz tego, ponieważ jest to zły projekt oprogramowania. Oprogramowanie 101.
n13

@ n13 Możesz podzielić logikę na podklasy (ukryte lub nie), przestrzegać zarówno litery, jak i intencji dobrej praktyki, jednocześnie centralizując dostęp do swojej logiki. Jest to ten sam argument, co użycie mikrousług vs pojedynczy interfejs API. Chociaż mikrousług są opcją, nie oznacza to, że „normalny” interfejs API REST jest zatem złą praktyką.
Flater,

Odpowiedzi:


6

Co to jest obiekt Boga? Z Wikipedii:

Większość ogólnej [obiektu Boga zawierającego] program jest zakodowana w jednym „wszechwiedzącym” obiekcie, który przechowuje większość informacji o całym programie, a także zapewnia większość metod manipulowania tymi danymi. Ponieważ ten obiekt zawiera tak wiele danych i wymaga tak wielu metod, jego rola w programie staje się podobna do Boga (wszechwiedzący i wszechobejmujący).

Magazyn Redux zawiera tylko jeden obiekt danych i wymaga tylko 2 lub 3 metod. Pod tym względem trudno wyobrazić sobie myślenie o nim jako o przedmiocie Boga. Zdecydowanie nie jest to „cała wiedza”.

Teraz, czy reduktor nie jest uszkodzony w ogóle, jeśli cała logika jest w jednej funkcji, a następnie , że może kwalifikować ale jest to prosta sprawa, aby rozbić reduktor pod bandą mniejsze kawałki, aby uniknąć sytuacji.


Myślę, że OP zastanawia się, czy wszystkie reduktory razem plus Sklep liczą się jako „Boski Obiekt”.
user949300

1
Czy wszystkie klasy modeli programu razem liczą się jako obiekt boga?
Daniel T.

Twierdziłbym, że w tradycyjnym OOP nie wszyscy operują na tych samych danych „wszystkiego”, więc nie, nie są.
user949300

Reduktory również nie działają na tych samych danych „wszystkiego”. Pojedynczy reduktor odpowiada jednej klasie modeli. Dane reduktora są równoważne z polami klasy, a akcje są równoważne z metodami klasy (tj. Każda instrukcja przypadku jest równoważna określonej metodzie).
Daniel T.

2

IMO, powyższe pytanie nie powinno powstać. Koncepcje programowania funkcjonalnego nie są porównywalne z koncepcjami w OOPS, są to po prostu różne sposoby rozwiązania tego samego problemu. wprowadź opis zdjęcia tutaj


5
Zrobiłeś ten obraz tabeli tylko na pytanie? Myślę, że lepiej nadaje się jako tekst, dzięki czemu ładuje się szybciej i można go zaobserwować za pomocą czytnika ekranu
Phoenix,

Czy OOP nie zachęca również do jednokierunkowego przepływu danych? Chyba że uważasz, że OOP to po prostu koncepcja klas, które mogą przechowywać odniesienia do siebie, ale nie jest to właściwy projekt, w którym odniesienia dwukierunkowe zwykle wskazują na wadę projektu.
Steven Jeuris

Większość rzeczy, o których wspominasz w OOP i FP, nie ma nawet nic wspólnego ze stwierdzeniem problemu w pierwszej kolumnie. na przykład kompozycja funkcji utrudnia tylko zrozumienie struktury stanu i jego zmian
Ski

Wygląda na to, że wolisz FP, ale według mnie twoja odpowiedź po prostu potwierdza moje odczucie, że jest to obiekt Boga. Podobnie jak OMG, mój stan jest tak złożony, ponieważ traktuję cały stan całego programu jako jedną wielką rzecz. Tak, to skomplikowane. W OOP masz wokół siebie logiczne modele obiektów, które są aktualizowane, co wcale nie jest wielkim problemem. Jeśli zdarzy się to asynchronicznie, to też dobrze. Widoki odzwierciedlają stan obiektu i jest to bardzo proste w praktyce.
n13

0

Pierwsza strona wyraźnie pokazuje, że Redux rozwiązuje problem specyficzny dla aplikacji internetowych z jedną stroną:

Ponieważ wymagania dotyczące aplikacji jednostronicowych JavaScript stają się coraz bardziej skomplikowane, nasz kod musi zarządzać większą liczbą stanów niż kiedykolwiek wcześniej. (z Redux - Motywacja)

Moje własne tłumaczenie brzmi - aplikacje internetowe i ramy tworzenia aplikacji internetowych są niechlujne, a ponieważ działają w przeglądarce, mają do czynienia z unikalnym zestawem problemów, które po prostu nie pojawiają się poza aplikacjami internetowymi.

Nie zrozumcie mnie źle - nie mówię, że aplikacje internetowe są złe lub że frameworki są złe. Chodzi o to, że strony internetowe i cały ten paradygmat o nim niezaprzeczalnie nigdy nie zostały zaprojektowane z myślą o aplikacjach. Niektóre aplikacje internetowe działają wyjątkowo dobrze - na przykład uwielbiam Dokumenty Google, są lepsze niż odpowiedniki aplikacji natywnych.

Ale Redux to tylko narzędzie do zarządzania problemami, które powstają, gdy trzeba poradzić sobie z ograniczeniami i problemami wynikającymi z tworzenia aplikacji internetowych działających w przeglądarce.

W przypadku aplikacji na system iOS lub natywnej aplikacji nie ma to sensu. Model obiektowy z łatwością obsługuje zmiany asynchroniczne i interakcję użytkownika. Zawsze będziesz wiedział, co się dzieje. Renderowanie różnych stanów nie stanowi problemu i jest zautomatyzowane za pomocą MVC i aktualizacji zdarzeń.

Nigdy nie masz do czynienia z sytuacją taką jak aplikacje internetowe.

** Jeśli twoja architektura jest zła, to dobrze, nic cię nie uratuje, nawet Redux;)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.