2016-05-14 24 views
4

scalascalajsDiode,我都用過,但沒有完全理解PotAction類和最近才發現的AsyncAction類,這兩個似乎涉及,很好,異步請求的情況下受到青睞。雖然我明白,我並不完全理解設計決定和命名選擇,這似乎暗示了一個更狹窄的用例。在用於scalajs的Diode庫中,Action,AsyncAction和PotAction之間的區別是什麼,哪種適合於身份驗證?

具體而言,既AsyncActionPotAction需要initialModelnext,好像兩者建模爲某種刷新的,可更新的內容,而不是在CQRS意義上的命令的異步請求。順便說一句,我有一個somewhat-related question open regarding synchronous actions on form inputs

我有幾個具體的使用案例。我想知道的你如何結合使用類似PotAction任何的草圖(不要求執行,只是概念):在傳統的流

  • 用戶名/密碼認證
  • OpenAuth-所涉及第三方和重定向
  • 幕後令牌或cookie認證
  • 的形式輸入
  • 提交的命令進行遠程Shell服務器端驗證形式的驗證

所有這些在性質上似乎與我所看到的使用PotAction有所不同,但我真的很想使用它,因爲當我根據當前狀態渲染某些內容時,它已經很有幫助的Pot

+0

'PotAction'只是一個方便的子類型'AsyncAction',它使用'Pot',這就解釋了爲什麼你有「相同」的方法。 – jmelanson

回答

4

從歷史上看,PotAction先到,然後在以後的時間AsyncAction被推廣出來的(支持PotMapPotVector),這也許可以解釋他們的關係有點。兩者都提供抽象和狀態處理來處理檢索遠程數據的異步操作。所以它們是爲了一個非常具體的(和普通的)用例而創建的。

但是,我不會使用它們進行身份驗證,因爲這通常是您在加載應用程序之前所做的或者從服務器請求的任何數據。

表單驗證通常是同步的事情,當用戶做其他事情時,您不會在後臺執行此操作,因此再次Async/PotAction不是很好的匹配,也不會提供太多附加價值。

最後,對於遠程命令用例PotAction可能很適合,假設您想在用戶準備好時向用戶顯示命令的結果。也許PotStream會更好,這取決於命令是產生穩定的數據流還是隻產生一條消息。

在大多數情況下,您應該使用各種Pot結構來表示它們的含義,即獲取和更新遠程數據,並且可能將某些想法或內部模型(如重試機制)應用於其他請求類型。

所有Pot的東西都從二極管核心分離成它自己的模塊,以強調它們只是與二極管一起工作的便利幫手。開發人員應該隨時爲新用例創建自己的幫助者(並回饋給Diode!)。

+0

可以安全地說,你可以使用'PotStream'來處理web套接字響應? –

+2

不是真的,因爲這些概念是完全不同的。 「PotStream」代表一個(可能是無限的)數據流,客戶希望看到給定的範圍。想象一下,像歷史悠久的聊天對話。通過'PotStream',您可以建立聊天記錄的模型,在流的兩端添加新消息以反映用戶如何滾動聊天記錄。 您可以使用Web套接字自動更新流,但不能將Web套接字模擬爲「PotStream」。 – ochrons

相關問題