Redux는 삭제 된 신 개체 패턴을 사용합니까?


15

Redux에 대해 배우는 동안 God-object 패턴 (또는 안티 패턴)이 떠 올랐습니다. 모두 하나의 큰 객체가 있으며 모든 앱 데이터와 조작 방법을 보유하고 있습니다. 그러나 Redux는 엄격한 서명을 유지하면서 객체를 불변으로 만들고 이벤트를 순수하게 만드는 것과 같은 제약을가했습니다.

그래서 Redux는 위생 처리 된 버전의 신 객체를 사용하고 있습니까? 아니면 고전적인 강력한 형식의 OOP가 아닌 Javascript와 관련이 있습니까?


2
짧은 대답 : 아닙니다. 긴 대답 (실제로 대답을 이끌어 내야 할 질문) : 데이터베이스는 클래스입니까? 아니면 파일 시스템은 어떻습니까? 아니면 캐시는 어떻습니까? 이 모든 신 패턴도 있습니까?
code4life

그렇습니다. Redux에 대한 첫 번째 성명서에는 "JavaScript 단일 페이지 응용 프로그램의 요구 사항이 점점 복잡 해짐에 따라 코드가 그 어느 때보 다 많은 상태를 관리해야합니다." -이것은 앱의 상태를 하나의 얼룩으로 관리해야 함을 의미합니다. 나는 그것이 웹 앱에만 국한된 문제라고 생각하며 웹 앱을 구현하는 데 사용되는 가난한 / 결코 설계되지 않은 프레임 워크에 의해 생성되었습니다.
n13

@ n13 : 중앙 위치에서 액세스 할 수 있다고해서 그것이 하나의 거대한 덩어리라는 것을 의미하지는 않습니다. 예를 들어, 내 데이터베이스는 중앙 집중식으로 액세스 DbContext되지만 ( ) 내부 데이터는 더 작은 부분 (테이블, 스키마)으로 세분됩니다.
Flater

@Flater 많은 세분화가있는 큰 얼룩은 여전히 ​​큰 얼룩입니다. 평범한 오래된 OO 모델은 모든 데이터를 알아야 할 필요에 따라 구획화합니다. 즉, 각 객체는 매우 적은 양의 상태 / 데이터 만 처리하며 모든 것이 매우 간단합니다. 하나의 거대한 전역 구조체에 모든 것을 저장할 수도 있지만 소프트웨어 디자인이 잘못되어 그렇게 할 수는 없습니다. 소프트웨어 101.
n13

@ n13 로직을 서브 클래스 (숨겨 지거나 숨기지 않음)로 분리하고 문자와 모범 사례 의 의도 를 모두 준수 하면서 로직에 대한 액세스를 중앙 집중화 할 수 있습니다. 마이크로 서비스와 단일 API를 사용하는 것과 같은 주장입니다. 마이크로 서비스는 옵션이지만 "정상"REST API가 나쁜 습관임을 의미하지는 않습니다.
Flater

답변:


6

신의 대상은 무엇입니까? Wikipedia에서 :

프로그램의 전체 기능은 대부분의 "알고있는"객체로 코딩되어 전체 프로그램에 대한 대부분의 정보를 유지하고이 데이터를 조작하기위한 대부분의 방법을 제공합니다. 이 객체는 많은 양의 데이터를 보유하고 있으며 많은 방법을 필요로하기 때문에 프로그램에서의 역할은 신과 비슷합니다 (모든 지식과 모든 것을 포괄).

Redux 저장소에는 하나의 데이터 개체 만 포함되며 2 개 또는 3 개의 메서드 만 필요합니다. 이런 점에서 그것을 신의 대상으로 생각하는 것은 상상하기 어렵습니다. "모두 아는 것" 이 아닙니다 .

이제 감속기가 전혀 고장 나지 않으면 모든 논리가 하나의 기능에 있으면 자격 될 수 있지만 상황을 피하기 위해 감속기를 여러 개의 작은 조각으로 나누는 것은 간단합니다.


OP가 모든 감속기 와 함께 Store를 "하나님의 개체"로 간주 하는지 궁금합니다 .
user949300

1
프로그램의 모든 모델 클래스가 함께 신의 대상으로 간주됩니까?
Daniel T.

나는 전통적인 OOP에서 그것들이 모두 같은 "모든 것"데이터에 대해 작동하는 것은 아니기 때문에 그렇지 않다고 주장한다.
user949300

감속기는 또한 모든 "모든"데이터에 대해 작동하지는 않습니다. 단일 감속기는 단일 모델 클래스와 동일합니다. 감속기의 데이터는 클래스의 필드와 동일하며 조치는 클래스의 메소드와 동일합니다 (즉, 각 사례는 특정 메소드와 동일합니다)
Daniel T.

2

IMO, 위의 질문은 발생하지 않아야합니다. 함수형 프로그래밍 개념은 OOPS의 개념과 비교할 수 없으며 동일한 문제를 해결하는 다른 방법 일뿐입니다. 여기에 이미지 설명을 입력하십시오


5
이 표 이미지를 질문 용으로 만 만드셨습니까? 나는 텍스트로 더 잘 어울리므로 더 빨리로드되고 스크린 리더로 볼 수 있다고 생각합니다.
Phoenix

OOP도 단방향 데이터 흐름을 장려하지 않습니까? OOP를 단순히 서로에 대한 참조를 보유 할 수있는 클래스의 개념으로 간주하지 않는 한 양방향 참조가 일반적으로 설계 결함을 나타내는 적절한 설계는 아닙니다.
Steven Jeuris 2016 년

OOP 및 FP에서 언급 한 대부분의 내용은 첫 번째 열의 문제 설명과 관련이 없습니다. 예를 들어 함수 구성은 상태 구조를 이해하기 어렵게 만들고 변경 사항
Ski

당신이 FP를 선호하는 것 같지만, 내 생각에 당신의 대답은 그것이 하나님의 대상이라는 느낌을 확인시켜줍니다. OMG와 마찬가지로 주 전체는 매우 복잡합니다. 왜냐하면 전체 프로그램의 전체 상태를 하나의 큰 것으로 취급하기 때문입니다. 예, 복잡합니다. OOP에는 업데이트되지 않은 논리적 객체 모델이 있습니다. 그것이 동시에 발생하면 그것도 괜찮습니다. 뷰는 객체의 상태를 반영하며 실제로는 매우 간단합니다.
n13

0

첫 페이지는 Redux가 단일 페이지 웹 앱과 관련된 문제를 해결한다는 것을 명확하게 보여줍니다.

JavaScript 단일 페이지 응용 프로그램에 대한 요구 사항이 점점 복잡해지면서 코드는 그 어느 때보 다 많은 상태를 관리해야합니다. (Redux에서-동기 부여)

내 자신의 번역은 웹 응용 프로그램과 웹 응용 프로그램을 만들기위한 프레임 워크가 지저분하고 브라우저에서 실행되면서 웹 응용 프로그램 외부에서는 발생하지 않는 고유 한 문제에 직면 해 있습니다.

잘못 이해하지 마십시오. 웹 앱이 나쁘거나 프레임 워크가 나쁘다는 말은 아닙니다. 웹 페이지와 그에 대한 전체 패러다임은 결코 응용 프로그램을 염두에두고 설계되지 않았습니다. 일부 웹 앱은 놀랍도록 잘 작동합니다. 예를 들어 Google 문서를 좋아합니다. 기본 앱보다 더 좋습니다.

그러나 Redux는 브라우저에서 실행되는 웹 응용 프로그램을 만들 때 발생하는 제한 사항과 문제를 처리해야 할 때 발생하는 문제를 관리하는 도구 일뿐입니다.

iOS 앱 또는 모든 종류의 기본 앱의 경우 의미가 없습니다. 객체 모델은 비동기 변경 및 사용자 상호 작용을 쉽게 처리합니다. 당신은 항상 무슨 일이 일어나고 있는지 알 수 있습니다. 다른 상태를 렌더링하는 것은 문제가되지 않으며 MVC 및 업데이트 이벤트로 자동화됩니다.

웹 앱과 같은 상황에 처한 적이 없습니다.

** 아키텍처가 나쁘면 Redux조차도 아무것도 당신을 구할 수 없습니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.