Sunucudan kullanıcıya gönderilen veriler nasıl yapılandırılır?
Mesajlaşma düzenini kullanın . Zaten bir mesajlaşma protokolü kullanıyorsunuz, ama değişiklikleri mesaj olarak yapılandırmak ... özellikle olaylar. Sunucu tarafı değiştiğinde, bu iş olaylarıyla sonuçlanır. Senaryonuzda, müşteri görüşleriniz bu olaylarla ilgilenir. Olaylar, bu değişiklikle ilgili tüm verileri içermelidir (mutlaka tüm görüntüleme verilerini içermez). Müşteri sayfası daha sonra koruduğu görünüm bölümlerini olay verileriyle güncellemelidir.
Örneğin, bir hisse senedi senedi güncelliyorsanız ve AAPL değiştiyse, tüm hisse senedi fiyatlarını veya hatta AAPL ile ilgili tüm verileri (ad, açıklama vb.) Aşağı itmek istemezsiniz. Sadece AAPL'yi, deltayı ve yeni fiyatı itersiniz. İstemcide, görünümde yalnızca bu hisse senedi fiyatını güncellersiniz.
Yalnızca "bu kaynak güncellendi ve bir AJAX çağrısı yoluyla yeniden yüklemelisiniz" gibi olayları göndermeli miyim yoksa güncellenmiş verileri aktarmalı ve ilk AJAX çağrıları aracılığıyla yüklenen önceki verileri değiştirmeli miyim?
Ben de söyleyemem. Etkinliği gönderiyorsanız devam edin ve etkinlikle ilgili verileri gönderin (tüm nesnenin verilerini değil). Olduğu olay için bir isim verin. (Adlandırma ve o olayla ilgili hangi veriler sistemin mekanik çalışmalarının kapsamı dışındadır. Bunun, iş mantığının nasıl modelleneceği ile daha fazla ilgilidir.) Görüntüleme güncelleyicilerinizin her bir olayın nasıl çevrileceğini bilmesi gerekir hassas bir görünüm değişikliği (yani yalnızca nelerin değiştiğini güncelleyin).
Gönderilen verilere tutarlı ve ölçeklenebilir bir iskelet nasıl tanımlanır? bu bir model güncelleme mesajı mı yoksa "blahblahblah ile ilgili bir hata oluştu" mesajı mı
Bunun büyük, açık uçlu bir soru olduğunu söyleyebilirim, diğer birkaç soruya bölünmeli ve ayrı olarak gönderilmelidir.
Genel olarak, arka uç sisteminiz, işinizde önemli olaylar için etkinlikler oluşturmalı ve göndermelidir. Bunlar harici yemlerden veya arka uçtaki aktiviteden gelebilir.
Arka uçtaki herhangi bir yerden her şey hakkında veri nasıl gönderilmez?
Yayınlama / abone olma düzenini kullanın . SPA'nız gerçek zamanlı güncellemeler almakla ilgilenen yeni bir sayfa yüklediğinde, sayfa yalnızca kullanabileceği olaylara abone olmalı ve bu olaylar geldiğinde görünüm güncelleme mantığını çağırmalıdır. Muhtemelen pub / alt mantığına ihtiyacınız olacaktır. ağ yükünü azaltmak için sunucuya. Websocket pub / sub için kütüphaneler var, ancak Rails ekosisteminde ne olduğundan emin değilim.
Hem sunucu hem de istemci tarafında iş mantığı çoğaltması nasıl azaltılır?
Hem istemci hem de sunucudaki görünüm verilerini güncellemek zorunda olduğunuz anlaşılıyor. Sanırım gerçek zamanlı istemciyi başlatmak için bir anlık görüntünüz olması için sunucu tarafı görünüm verilerine ihtiyacınız var. İki dil / platform (Ruby ve Javascript) olduğu için, görünüm güncelleme mantığının her ikisine de yazılması gerekir. (Kendi sorunları olan) nakli dışında, bunun için bir yol göremiyorum.
Teknik nokta: Veri işleme (görünümü güncelleme) iş mantığı değildir. Kullanım örneği doğrulamasını kullanmak istiyorsanız, istemcinin doğrulamaları iyi kullanıcı deneyimi için gerekli olduğundan, ancak sonuçta sunucu tarafından güvenilemediğinden bu kaçınılmaz görünmektedir.
İşte böyle bir şeyi iyi yapılandırılmış görüyorum.
Müşteri Görüşleri:
- Bir görünüm anlık görüntüsü ve görünümün son görülen olay numarasını ister
- Bu, görünümün önceden doldurulmasını sağlar, böylece istemci sıfırdan oluşturmak zorunda kalmaz.
- Basitlik için HTTP GET üzerinden olabilir
- Web soketi bağlantısı kurar ve görünümün son etkinlik numarasından başlayarak belirli etkinliklere abone olur.
- Web soketi üzerinden olayları alır ve olay türüne / verilerine göre görünümünü günceller.
İstemci Komutları:
- Veri değişikliği iste (HTTP PUT / POST / DELETE)
- Yanıt sadece başarı veya başarısızlık + hatadır
- (Değişiklik tarafından oluşturulan etkinlikler websocket üzerinden gelir ve görünüm güncellemesini tetikler.)
Sunucu tarafı aslında sınırlı sorumlulukları olan birkaç bileşene ayrılabilir. Yalnızca gelen istekleri işleyen ve etkinlikler oluşturan bir. Bir diğeri istemci aboneliklerini yönetebilir, olayları dinleyebilir (işlem sırasında) ve uygun olayları abonelere iletebilir. Olayları dinleyen ve sunucu tarafı görünümlerini güncelleyen bir üçüncünüz olabilir - belki bu, aboneler olayları almadan önce bile olabilir.
Tarif ettiğim bir tür CQRS + Mesajlaşma ve karşılaştığınız sorunları ele almak için tipik bir stratejidir.
Olay Kaynak Oluşturma'yı bu açıklamaya getirmedim , çünkü almak istediğiniz bir şey olup olmadığından veya buna ihtiyacınız olup olmadığından emin değilim. Ancak, ilgili bir örüntüdür.