Redux, sterilize edilmiş bir Tanrı nesne modeli kullanıyor mu?


15

Redux'u öğrenirken, Tanrı-nesne paterni (veya anti-patern) aklıma geldi- her ikisinin de tüm uygulama verilerini tutan tek bir büyük nesnesi ve bunları manipüle etme yöntemleri var. Ancak Redux, Nesneyi değişmez kılmak ve katı imzayı sürdüren saf işlevler gibi bazı kısıtlamalar koymuştur.

Yani soru geldi, Redux Tanrı nesnesinin temizlenmiş bir versiyonunu kullanıyor mu? Veya Javascript'in klasik olarak güçlü bir şekilde yazılmış OOP olmamasıyla ilgili bir şey var mı?


2
Kısa cevap: hayır. Uzun cevap (aslında cevaba yol açması gereken bir soru): bir veritabanı bir sınıf mı? Ya da bir dosya sistemine ne dersiniz? Ya da önbellek? Bunların hepsi de Tanrı kalıpları mı?
code4life

IMO evet öyle. Redux ile ilgili ilk açıklamada: "JavaScript tek sayfalık uygulamalar için gereksinimler gittikçe karmaşıklaştıkça, kodumuz her zamankinden daha fazla durumu yönetmelidir." - Bu, uygulamanızın durumunu tek bir damla olarak yönetmeniz gerektiğini gösterir. Bence bu, web uygulamalarına özgü bir sorun ve web uygulamalarını uygulamak için kullanılan zayıf / hiç tasarlanmamış bu çerçeveler tarafından yaratılmış.
n13

@ n13: Merkezi bir yerden erişilebilir olması, bu yüzden büyük bir damla olduğu anlamına gelmez. Örneğin, veritabanımıza merkezi bir şekilde ( DbContext) erişilir ancak dahili verileri daha küçük parçalara (tablolar, şemalar) bölünür.
flater

@ Birçok alt bölümü olan büyük bir damla hala büyük bir damla. Sade eski bir OO modeli, tüm verileri bilmesi gereken bir temelde bölümlere ayırır; bu, her nesnenin yalnızca çok az miktarda durum / veriyle uğraştığı ve her şeyin oldukça basit olduğu anlamına gelir. Her şeyi tek bir dev küresel yapıda da saklayabilirsiniz, ancak bunu yapmazsınız çünkü kötü yazılım tasarımıdır. Yazılım 101.
n13

@ n13 Mantığı alt sınıflara ayırabilir (gizli olsun ya da olmasın), hem mektuba hem de iyi uygulamanın amacına uyun, yine de mantığınıza erişimi merkezileştirin. Bu, tek bir API'ye karşı mikro hizmetlerin kullanılmasıyla aynı argüman. Mikro hizmetler bir seçenek olsa da, bu "normal" bir REST API'sinin kötü uygulama olduğu anlamına gelmez.
flater

Yanıtlar:


6

Tanrı nesnesi nedir? Wikipedia'dan:

Programın genel işlevselliğini içeren bir Tanrı nesnesinin çoğu, tüm program hakkındaki bilgilerin çoğunu koruyan ve bu verilerin işlenmesi için yöntemlerin çoğunu sağlayan tek bir "her şeyi bilen" nesneye kodlanır. Bu nesne çok fazla veri içerdiğinden ve çok fazla yöntem gerektirdiğinden, programdaki rolü Tanrı'ya benzer (her şeyi bilen ve her şeyi kapsayan).

Redux deposu yalnızca bir veri nesnesi içerir ve yalnızca 2 veya 3 yöntem gerektirir. Bu açıdan bir Tanrı nesnesi olarak düşünmeyi hayal etmek zor. Kesinlikle "her şeyi bilmek" değildir .

Şimdi redüktörünüz hiç kırılmamışsa, tüm mantık bir işlevdeyse, bu hak kazanabilir, ancak durumu önlemek için redüktörü bir grup küçük parçaya ayırmak basit bir konudur.


Bence OP tüm redüktörlerin yanı sıra Mağaza'nın da bir “Tanrı Nesnesi” olarak sayılıp sayılmadığını merak ediyor .
user949300

1
Bir programın tüm model sınıfları birlikte bir tanrı nesnesi olarak sayılır mı?
Daniel T.

Geleneksel OOP'ta hepsinin aynı "her şey" verisi üzerinde çalışmadığını, bu yüzden hayır olmadığını iddia ediyorum.
user949300

Redüktörlerin hepsi aynı "her şey" verisi üzerinde çalışmaz. Tek bir redüktör, tek bir model sınıfına eşdeğerdir. İndirgeyicinin verileri sınıfın alanlarına eşdeğerdir ve eylemler sınıfın yöntemlerine eşdeğerdir (yani her vaka ifadesi belirli bir yönteme denktir.)
Daniel T.

2

IMO, Yukarıdaki soru ortaya çıkmamalıdır. Fonksiyonel programlama kavramları OOPS'taki kavramlarla karşılaştırılamaz, sadece aynı problemi çözmenin farklı yollarıdır. resim açıklamasını buraya girin


5
Bu tablo resmini sadece soru için mi yaptınız? Metin olarak daha uygun olacağını düşünüyorum, böylece daha hızlı yüklenir ve bir ekran okuyucu ile gözlemlenebilir
Phoenix

OOP ayrıca tek yönlü veri akışını da teşvik etmiyor mu? OOP'yi basitçe birbirine referans alabilen sınıflar kavramı olarak düşünmediğiniz sürece, ancak çift yönlü referansların tipik olarak bir tasarım kusurunu gösterdiği uygun tasarım değil.
Steven Jeuris

OOP ve FP altında bahsettiğiniz şeylerin çoğunun ilk sütundaki sorun ifadesiyle hiçbir ilgisi yoktur. Örneğin, işlev kompozisyonu, devlet yapısını ve değişikliklerini anlamayı zorlaştırır
Ski

Görünüşe göre FP'yi tercih ediyorsun, ama bence cevabın bunun bir Tanrı nesnesi olduğunu hissettiğimi onaylıyor. OMG gibi durumum çok karmaşık, çünkü tüm programın tüm durumuna büyük bir şey gibi davranıyorum. Evet, bu karmaşık. OOP'de, güncellenen mantıksal nesne modelleriniz var, ki bu hiç de önemli değil. Bu zaman uyumsuzca olursa da bu iyi. Görüşler nesnenin durumunu yansıtır ve pratikte çok basittir.
n13

0

İlk sayfa, Redux'un tek sayfa web uygulamalarına özgü bir sorunu çözdüğünü açıkça ortaya koyuyor:

Tek sayfa JavaScript uygulamaları için gereksinimler gittikçe karmaşıklaştıkça, kodumuzun her zamankinden daha fazla durumu yönetmesi gerekir. (Redux'dan - Motivasyon)

Kendi çevirim - web uygulamaları ve web uygulamaları oluşturmak için çerçeveler dağınık ve bir tarayıcıda çalışırken, web uygulamalarının dışında ortaya çıkmayan benzersiz bir dizi sorunla karşı karşıya kalıyorlar.

Beni yanlış anlamayın - Web uygulamalarının kötü olduğunu veya çerçevelerin kötü olduğunu söylemiyorum. Sadece web sayfaları ve onunla ilgili tüm paradigma, inkar edilemez bir şekilde asla uygulamalar düşünülerek tasarlanmamıştı. Bazı web uygulamaları oldukça iyi çalışıyor - örneğin Google Dokümanlar'ı seviyorum, yerel uygulama eşdeğerlerinden daha iyi.

Ancak Redux, bir tarayıcıda çalışan web uygulamaları oluşturmanın getirdiği sınırlamalar ve sorunlarla uğraşmanız gerektiğinde ortaya çıkan sorunları yönetmek için sadece bir araçtır.

Bir iOS uygulaması veya herhangi bir türdeki yerel uygulama için mantıklı değil. Nesne modeli, zaman uyumsuz değişiklikleri ve kullanıcı etkileşimini kolaylıkla ele alır. Ne olduğunu her zaman bileceksin. Farklı durumları oluşturmak bir sorun değildir ve MVC ve güncelleme olaylarıyla otomatikleştirilir.

Web uygulamaları gibi bir durumla asla karşılaşmazsınız.

** Mimariniz kötüyse, o zaman hiçbir şey sizi kurtaramaz, Redux bile;)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.