O Redux está usando um padrão de objeto de Deus higienizado?

15

Enquanto aprendia sobre o Redux, o padrão de objeto de Deus (ou antipadrão) veio à minha mente - ambos tinham um único grande objeto contendo todos os dados e métodos do aplicativo para manipulá-los. Mas o Redux impôs algumas restrições, como tornar o objeto imutável e eventos puros, mantendo uma assinatura estrita.

Então surgiu a pergunta: o Redux está usando uma versão higienizada do objeto de Deus? Ou, há algo a ver com o Javascript não ser clássico OOP fortemente tipado?

Gulshan
fonte
2
Resposta curta: não. Resposta longa (na verdade uma pergunta que deve levar à resposta): um banco de dados é uma classe? Ou que tal um sistema de arquivos? Ou que tal um cache? Esses são todos os padrões de Deus também?
code4life
OMI sim, é. Está na primeira declaração sobre o Redux: "Como os requisitos para aplicativos de página única em JavaScript se tornaram cada vez mais complicados, nosso código deve gerenciar mais estados do que nunca". - isso implica que você precisa gerenciar o estado do seu aplicativo como um blob. Eu acho que é um problema específico para aplicativos da web e criado pelas estruturas pobres / nunca projetadas para este que são usadas para implementar aplicativos da web.
n13 6/09/18
@ n13: Só porque é acessível a partir de uma localização centralizada, não significa que seja, portanto, uma bolha enorme. Por exemplo, meu banco de dados é acessado de forma centralizada ( DbContext), mas seus dados internos são subdivididos em partes menores (tabelas, esquemas).
Flater 6/18
@ Flater um grande blob com muitas subdivisões ainda é um grande blob. Um modelo simples e antigo de OO compartimenta todos os dados com base na necessidade de conhecimento, o que significa que cada objeto lida apenas com uma quantidade muito pequena de estado / dados e tudo é bem simples. Você também pode armazenar tudo em uma estrutura global gigante, mas não faz isso porque é um design de software ruim. Software 101.
n13 13/09/18
@ n13 Você pode separar a lógica em subclasses (ocultas ou não), cumprir a letra e a intenção de boas práticas, enquanto ainda centraliza o acesso à sua lógica. É o mesmo argumento que o uso de microsserviços versus uma única API. Embora os microsserviços sejam uma opção, isso não significa que uma API REST "normal" seja, portanto, uma prática recomendada.
Flater

Respostas:

6

O que é um objeto de Deus? Da Wikipedia:

A maior parte da funcionalidade geral do programa [um objeto que contém Deus] é codificada em um único objeto "onisciente", que mantém a maioria das informações sobre o programa inteiro e também fornece a maioria dos métodos para manipular esses dados. Como esse objeto contém muitos dados e requer tantos métodos, seu papel no programa se torna semelhante a Deus (onisciente e abrangente).

O repositório Redux contém apenas um objeto de dados e requer apenas 2 ou 3 métodos. A esse respeito, é difícil imaginar pensar nisso como um objeto de Deus. Decididamente, não é "tudo que sabe".

Agora, se o seu redutor não estiver quebrado, se toda a lógica estiver em uma função, isso poderá ser qualificado, mas é uma questão simples dividir o redutor em vários pedaços menores para evitar a situação.

Daniel T.
fonte
Acho que o OP está se perguntando se todos os redutores juntos , além da Store, contam como um "Objeto de Deus".
user949300
1
Todas as classes de modelo de um programa juntas contam como um objeto divino?
Daniel T.
Eu diria que na OOP tradicional eles não estão todos operando nos mesmos dados "tudo", então não, não estão.
user949300
Os redutores também nem todos funcionam com os mesmos dados "tudo". Um único redutor é equivalente a uma única classe de modelo. Os dados do redutor é equivalente a campos da classe e as ações são equivalentes aos métodos da classe (ou seja, cada caso declaração é equivalente a um método específico.)
Daniel T.
2

IMO, A questão acima não deve surgir. Os conceitos de programação funcional não são comparáveis ​​aos do OOPS, são apenas maneiras diferentes de resolver o mesmo problema. insira a descrição da imagem aqui

Sutikshan Dubey
fonte
5
Você criou esta imagem da tabela apenas para a pergunta? Eu acho que seria mais adequado como texto, para que ele carrega mais rápido e pode ser observado com um leitor de tela
Phoenix
OOP também não incentiva o fluxo de dados unidirecional? A menos que você considere OOP como simplesmente o conceito de classes que podem conter referências uma à outra, mas não o design adequado, onde as referências bidirecionais normalmente indicam uma falha no design.
Steven Jeuris
A maioria das coisas mencionadas em OOP e FP nem sequer tem nada a ver com a declaração do problema na primeira coluna. a composição da função, por exemplo, apenas torna mais difícil entender a estrutura do estado e suas alterações #
Ski
Parece que você prefere FP, mas, na minha opinião, sua resposta apenas confirma meu sentimento de que é um objeto de Deus. Como OMG, meu estado é tão complexo, porque estou tratando todo o estado de todo o programa como algo importante. Sim, isso é complexo. No OOP, você tem modelos de objetos lógicos atualizados que não são um grande problema. Se isso acontecer de forma assíncrona, tudo bem também. As visualizações refletem o estado do objeto e é muito simples na prática.
n13 6/09/18
0

A primeira página deixa bem claro que o Redux resolve um problema específico dos aplicativos Web de página única:

Como os requisitos para aplicativos de página única JavaScript se tornam cada vez mais complicados, nosso código deve gerenciar mais estados do que nunca. (de Redux - Motivação)

Minha própria tradução é: os aplicativos da Web e as estruturas para a criação de aplicativos da Web são confusos e, quando estão sendo executados em um navegador, eles enfrentam um conjunto único de problemas que simplesmente não surgem fora dos aplicativos da Web.

Não me interpretem mal - não estou dizendo que os aplicativos da web são ruins ou que as estruturas são ruins. É que as páginas da Web e todo o paradigma sobre ele inegavelmente nunca foram projetados com os aplicativos em mente. Alguns aplicativos da Web funcionam notavelmente bem - eu amo o Google Docs, por exemplo, é melhor que os equivalentes de aplicativos nativos.

Mas o Redux é apenas uma ferramenta para gerenciar os problemas que surgem quando você precisa lidar com as limitações e os problemas decorrentes da criação de aplicativos da Web que são executados em um navegador.

Para um aplicativo iOS, ou um aplicativo nativo de qualquer tipo, não faz sentido. O modelo de objeto lida com alterações assíncronas e interação do usuário com facilidade. Você sempre saberá o que está acontecendo. A renderização de estados diferentes não é um problema e é automatizada com MVC e eventos de atualização.

Você nunca se depara com uma situação como os aplicativos da web.

** Se sua arquitetura é ruim, então nada pode salvá-lo, nem mesmo o Redux;)

n13
fonte