Apakah Redux menggunakan pola objek Dewa yang disanitasi?


15

Ketika belajar tentang Redux, pola objek-Tuhan (atau pola-anti) muncul di pikiran saya - keduanya memiliki objek besar tunggal yang menampung semua data aplikasi dan metode untuk memanipulasi mereka. Tetapi Redux telah menempatkan beberapa kendala seperti membuat Objek tidak berubah dan acara berfungsi murni mempertahankan tanda tangan yang ketat.

Jadi pertanyaannya adalah, apakah Redux menggunakan versi objek Tuhan yang sudah disanitasi? Atau, ada sesuatu yang bisa dilakukan dengan Javascript tidak menjadi klasik sangat diketik OOP?


2
Jawaban singkat: tidak. Jawaban panjang (sebenarnya pertanyaan yang seharusnya mengarah pada jawaban): apakah basis data adalah kelas? Atau bagaimana dengan sistem file? Atau bagaimana dengan cache? Apakah ini semua pola Tuhan juga?
code4life

IMO ya itu. Ada dalam pernyataan pertama tentang Redux: "Karena persyaratan untuk aplikasi satu halaman JavaScript menjadi semakin rumit, kode kami harus mengelola lebih banyak status daripada sebelumnya." - ini menyiratkan bahwa Anda harus mengelola keadaan aplikasi Anda sebagai satu gumpalan. Saya pikir ini masalah khusus untuk aplikasi web dan dibuat oleh kerangka kerja yang buruk / tidak pernah dirancang untuk ini yang digunakan untuk mengimplementasikan aplikasi web.
n13

@ n13: Hanya karena dapat diakses dari lokasi terpusat tidak berarti karena itu satu gumpalan besar. Sebagai contoh, basis data saya diakses secara terpusat ( DbContext) tetapi data internalnya dibagi menjadi beberapa bagian yang lebih kecil (tabel, skema).
Flater

@Flater gumpalan besar dengan banyak subdivisi masih gumpalan besar. Model OO lama yang sederhana mengkompartementasikan semua data berdasarkan kebutuhan yang perlu diketahui yang berarti setiap objek hanya berurusan dengan jumlah / status negara yang sangat kecil dan semuanya sangat sederhana. Anda juga dapat menyimpan semuanya dalam satu struct global raksasa tetapi Anda tidak melakukannya karena desain perangkat lunaknya buruk. Perangkat Lunak 101.
n13

@ n13 Anda dapat memisahkan logika menjadi subclass (tersembunyi atau tidak), mematuhi baik surat maupun niat praktik yang baik, sambil tetap memusatkan akses ke logika Anda. Ini argumen yang sama dengan menggunakan layanan microser vs api tunggal. Meskipun layanan microser merupakan opsi, itu tidak berarti bahwa REST API "normal" adalah praktik yang buruk.
Flater

Jawaban:


6

Apa objek Tuhan? Dari Wikipedia:

Sebagian besar fungsi keseluruhan program [objek Tuhan] dikodekan menjadi satu objek "serba tahu", yang menyimpan sebagian besar informasi tentang keseluruhan program, dan juga menyediakan sebagian besar metode untuk memanipulasi data ini. Karena objek ini menyimpan begitu banyak data dan membutuhkan begitu banyak metode, perannya dalam program menjadi seperti Tuhan (maha tahu dan mencakup semua).

Toko Redux hanya berisi satu objek data dan hanya membutuhkan 2 atau 3 metode. Dalam hal ini, sulit membayangkan membayangkannya sebagai objek Tuhan. Jelas tidak "tahu semua."

Sekarang jika peredam Anda tidak rusak sama sekali, jika semua logika ada dalam satu fungsi, maka itu mungkin memenuhi syarat tetapi itu adalah masalah sederhana untuk memecah peredam menjadi sekelompok potongan-potongan kecil untuk menghindari situasi.


Saya pikir OP bertanya-tanya apakah semua reduksi bersama , ditambah Store, dihitung sebagai "Obyek Dewa".
user949300

1
Lakukan semua kelas model program bersama-sama dianggap sebagai objek dewa?
Daniel T.

Saya berpendapat bahwa dalam OOP tradisional mereka tidak semua beroperasi pada data "segalanya" yang sama, jadi, tidak, mereka tidak.
user949300

Reduksi juga tidak semuanya beroperasi pada data "segalanya" yang sama. Peredam tunggal setara dengan kelas model tunggal. Data reducer setara dengan bidang kelas dan tindakannya setara dengan metode kelas (Yaitu setiap pernyataan kasus setara dengan metode tertentu.)
Daniel T.

2

IMO, Pertanyaan di atas seharusnya tidak muncul. Konsep pemrograman fungsional tidak sebanding dengan konsep dalam OOPS, mereka hanya cara yang berbeda untuk memecahkan masalah yang sama. masukkan deskripsi gambar di sini


5
Apakah Anda membuat gambar tabel ini hanya untuk pertanyaan? Saya pikir itu akan lebih cocok sebagai teks, sehingga memuat lebih cepat dan dapat diamati dengan pembaca layar
Phoenix

Tidakkah OOP juga mendorong aliran data searah? Kecuali Anda menganggap OOP hanya sebagai konsep kelas yang dapat menampung referensi satu sama lain, tetapi bukan desain yang tepat di mana referensi dua arah biasanya menunjukkan cacat desain.
Steven Jeuris

Sebagian besar hal yang Anda sebutkan di bawah OOP dan FP bahkan tidak ada hubungannya dengan pernyataan masalah pada kolom pertama. fungsi-komposisi misalnya hanya membuat lebih sulit untuk memahami struktur negara dan perubahannya
Ski

Tampaknya Anda lebih suka FP, tetapi dalam benak saya jawaban Anda hanya agak menegaskan perasaan saya bahwa itu adalah objek Tuhan. Seperti OMG keadaan saya sangat kompleks, karena saya memperlakukan seluruh keadaan seluruh program sebagai satu hal besar. Ya, itu rumit. Di OOP, Anda memiliki model objek logis di sekitar yang diperbarui yang bukan masalah besar sama sekali. Jika itu terjadi secara asin, itu juga tidak masalah. Tampilan mencerminkan keadaan objek dan sangat sederhana dalam praktiknya.
n13

0

Halaman pertama membuatnya sangat jelas bahwa Redux memecahkan masalah yang khusus untuk aplikasi web satu halaman:

Karena persyaratan untuk aplikasi satu halaman JavaScript menjadi semakin rumit, kode kami harus mengelola lebih banyak status daripada sebelumnya. (dari Redux - Motivasi)

Terjemahan saya sendiri adalah - aplikasi web dan kerangka kerja untuk membuat aplikasi web berantakan dan ketika mereka berjalan di browser mereka dihadapkan dengan serangkaian masalah unik yang tidak muncul di luar aplikasi web.

Jangan salah paham - Saya tidak mengatakan aplikasi web itu buruk, atau kerangka kerjanya buruk. Hanya saja halaman web dan seluruh paradigma tentang hal itu tidak dapat disangkal tidak pernah dirancang dengan aplikasi dalam pikiran. Beberapa aplikasi web bekerja dengan sangat baik - Saya suka Google Documents misalnya, lebih baik daripada aplikasi asli yang setara.

Tetapi Redux hanyalah alat untuk mengelola masalah yang muncul ketika Anda harus berurusan dengan keterbatasan dan masalah yang timbul dari membuat aplikasi web yang berjalan di browser.

Untuk aplikasi iOS, atau aplikasi asli dalam bentuk apa pun, itu tidak masuk akal. Model objek menangani perubahan async dan interaksi pengguna dengan mudah. Anda akan selalu tahu apa yang terjadi. Rendering berbagai negara bukan masalah dan terotomatisasi dengan MVC dan memperbarui acara.

Anda tidak pernah dihadapkan pada situasi seperti aplikasi web.

** Jika arsitektur Anda buruk, maka tidak ada yang bisa menyelamatkan Anda, bahkan Redux;)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.