Чи Redux використовує санізований об'єкт Бога?


15

Дізнавшись про Redux, мені припала до уваги модель «Бог-об’єкт» (або анти-візерунок) - обидва мають єдиний великий об’єкт, який містить усі дані програми та методи їх маніпулювання. Але Redux поставив деякі обмеження, як зробити Об'єкт незмінним і події чистими функціями, підтримуючи сувору підпис.

Отже, постало питання, чи Redux використовує санізовану версію об'єкта Бога? Або є щось спільне з тим, що Javascript не є класичним сильно набраним OOP?


2
Коротка відповідь: ні. Довга відповідь (насправді питання, яке повинно призвести до відповіді): це база даних класу? А як щодо файлової системи? А як щодо кеша? Це теж усі Божі зразки?
code4life

ІМО так. Це в першій заяві про Redux: "Оскільки вимоги до односторінкових додатків JavaScript стають все складнішими, наш код повинен управляти станом більше, ніж будь-коли раніше". - це означає, що ви повинні керувати станом свого додатка як одна крапка. Я думаю, що це проблема, характерна для веб-додатків, і створена через погані / ніколи не розроблені для цього рамки, які використовуються для реалізації веб-додатків.
n13,

@ n13: Тільки тому, що він доступний з централізованого розташування, це не означає, що це один масивний випадок. Наприклад, до моєї бази даних звертається централізовано ( DbContext), але її внутрішні дані підрозділяються на менші частини (таблиці, схеми).
Flater

@Flater велика крапля з багатьма підрозділами все ще велика крапля. Звичайна стара модель ОО розділяє всі дані на основі необхідних знань, що означає, що кожен об'єкт має справу лише з дуже невеликою кількістю стану / даних, і все досить просто. Ви також можете зберігати все в одній гігантській глобальній структурі, але цього не робите, оскільки це поганий дизайн програмного забезпечення. Програмне забезпечення 101.
n13

@ n13 Ви можете розділити логіку на підкласи (приховані чи ні), відповідати як букві, так і наміру належної практики, при цьому централізуючи доступ до своєї логіки. Це той самий аргумент, як використання мікросервісів проти однієї програми. Хоча мікросервіси - це варіант, це не означає, що "нормальний" API REST - це погана практика.
Flater

Відповіді:


6

Що таке об'єкт Бога? З Вікіпедії:

Більшість загальних функціональних можливостей програми [що містить Бог] кодується в єдиний "всезнаючий" об'єкт, який зберігає більшу частину інформації про всю програму, а також надає більшість методів для маніпулювання цими даними. Оскільки цей об’єкт містить стільки даних і потребує стільки методів, його роль у програмі стає подібною до Бога (всезнаючої та всеохоплюючої).

Магазин Redux містить лише один об'єкт даних і вимагає лише 2 або 3 способу. У цьому відношенні важко уявити, як думати про це як про бог. Це, очевидно, не "все знають".

Тепер, якщо ваш редуктор зовсім не розбитий, якщо вся логіка знаходиться в одній функції, то це може бути кваліфікованим, але це просто питання, щоб розбити редуктор на купу більш дрібних шматочків, щоб уникнути ситуації.


Я думаю, що ОП цікавить, чи всі редуктори разом , а також Магазин вважаються "об'єктом Бога".
user949300

1
Чи всі моделі моделей програми разом вважаються об'єктом бога?
Даніель Т.

Я б заперечував, що в традиційних OOP вони не працюють на одних і тих же "все" даних, так, ні, вони не є.
user949300

Також редуктори не працюють на одних і тих же даних "про все". Одиничний редуктор еквівалентний одному класу моделей. Дані редуктора еквівалентні полям класу, а дії еквівалентні методам класу (тобто кожен випадок випадку еквівалентний конкретному методу.)
Даніель Т.

2

ІМО, вищезазначене питання не повинно виникати. Концепції функціонального програмування не порівнянні з поняттями в OOPS, вони просто різні способи вирішення однієї проблеми. введіть тут опис зображення


5
Ви створили це зображення таблиці просто для запитання? Я думаю, що це краще підходить як текст, щоб він завантажувався швидше і його можна було спостерігати з екраном зчитування
Phoenix

Чи OOP також не заохочує односпрямований потік даних? Якщо ви не вважаєте OOP просто концепцією класів, яка може містити посилання один на одного, але не належним дизайном, коли двонаправлені посилання зазвичай вказують на недолік дизайну.
Стівен Євріс

Більшість матеріалів, які ви згадуєте в OOP та FP, навіть не мають нічого спільного з постановкою проблеми в першій колонці. Наприклад, функціональна композиція лише ускладнює розуміння структури держави та її зміни
Ski

Здається, ви віддаєте перевагу FP, але на мій погляд, ваша відповідь начебто підтверджує моє відчуття, що це об'єкт Бога. Як і OMG, мій стан настільки складний, тому що я ставлюсь до всього стану всієї програми як до однієї великої речі. Так, це складно. У OOP у вас є логічні моделі об'єктів, які оновлюються, що зовсім не є великою справою. Якщо це трапиться асинхронно, це теж добре. Погляди відображають стан об’єкта, і це дуже просто на практиці.
n13,

0

На першій сторінці чітко видно, що Redux вирішує проблему, характерну для веб-додатків на одній сторінці:

Оскільки вимоги до односторінкових додатків JavaScript стають все складнішими, наш код повинен керувати більш станом, ніж будь-коли раніше. (від Redux - Мотивація)

Мій власний переклад - веб-додатки та рамки для створення веб-додатків безладні, і коли вони працюють в браузері, вони стикаються з унікальним набором проблем, які просто не виникають поза веб-додатками.

Не зрозумійте мене неправильно - я не кажу, що веб-додатки погані або що рамки погані. Це просто те, що веб-сторінки та вся парадигма про неї, безперечно, ніколи не розроблялася з урахуванням додатків. Деякі веб-додатки працюють надзвичайно добре - наприклад, я люблю Документи Google, це краще, ніж рідні еквіваленти додатків.

Але Redux - це лише інструмент для управління проблемами, які виникають, коли доводиться стикатися з обмеженнями та проблемами, які виникають при створенні веб-додатків, які працюють у браузері.

Для додатків iOS або нативного додатка будь-якого типу це не має сенсу. Об'єктна модель легко обробляє зміни асинхронізації та взаємодії з користувачем. Ви завжди будете знати, що відбувається. Відображення різних станів не є проблемою і автоматизується з MVC та подіями оновлення.

Ви ніколи не стикалися з такою ситуацією, як веб-додатки.

** Якщо ваша архітектура погана, то добре, нічого не може врятувати вас, навіть Redux;)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.