clojure_dart_tea_示例

ClojureDart Flutter 项目,演示了

  • Graphql 的使用;
  • 使用类似 TEA* 的 MVU 架构管理业务逻辑和状态。
  • 来自 ClojureDart/alpha 的 widget 和 nest 宏。

* The Elm architecture (Elm 架构)

image

警告!

此方法尚未准备好用于生产,仅为概念演示。

MVU TEA-like 架构

我将提供我对 TEA 的看法。

有 4 部分

  1. Model – 应用程序状态。
  2. Effects – 副作用函数。
  3. Message – 发生的事件,例如用户点击或效果结果
  4. Update – 一个接收旧模型和消息,并返回带有效果列表的新模型的函数。

为了让这一切正常工作,我们有一个 dispatch 函数,它从所有源接收消息。

所以在这个应用中,这些组件是

  1. Model. Flutter/widget 的状态。
  2. Effects. 具有 (defn some-effect [dispatch-fn] ...) 签名的函数。
  3. Messages. 关键字。
  4. Update. 具有 (defn update [state message-key data]) 签名的函数。Data 是消息抽象的一部分。

为了让这一切正常工作,你不需要一个框架,只需要一个 dispatch 函数

(defn- ^:async dispatch! [tea-update state-atom message data]
  (let [[new-state effects] (tea-update @state-atom message data)
        dispatch-for-effet-fn (partial dispatch! state-atom)]
    (reset! state-atom new-state) ;; state modification
    (doseq [e effects] (await (e dispatch-for-effet-fn)))))

资源

GitHub

查看 Github