clojure_dart_tea_示例
ClojureDart Flutter 项目,演示了
- Graphql 的使用;
- 使用类似 TEA* 的 MVU 架构管理业务逻辑和状态。
- 来自 ClojureDart/alpha 的 widget 和 nest 宏。
* The Elm architecture (Elm 架构)
警告!
此方法尚未准备好用于生产,仅为概念演示。
MVU TEA-like 架构
我将提供我对 TEA 的看法。
有 4 部分
- Model – 应用程序状态。
- Effects – 副作用函数。
- Message – 发生的事件,例如用户点击或效果结果
- Update – 一个接收旧模型和消息,并返回带有效果列表的新模型的函数。
为了让这一切正常工作,我们有一个 dispatch 函数,它从所有源接收消息。
所以在这个应用中,这些组件是
- Model. Flutter/widget 的状态。
- Effects. 具有
(defn some-effect [dispatch-fn] ...)签名的函数。 - Messages. 关键字。
- 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)))))
资源
- ClojureDart
- ClojureDart 与 clojure 的区别。
- 我最初用于 graphql 和 UI 的Dart项目。
