7 个版本 (重大更改)

0.6.0 2024 年 1 月 1 日
0.5.0 2023 年 12 月 26 日
0.4.0 2023 年 11 月 29 日
0.2.1 2023 年 11 月 6 日
0.0.1 2023 年 7 月 22 日

#48#依赖注入

每月 27 次下载
3 个crate中使用了(通过rearch

MIT 协议

9KB

CI Status Github Stars MIT License

Banner

ReArch = 重新构想的应用设计和架构方法


特性

具体来说,ReArch 是以下方面的创新解决方案

  • ⚡️ 状态管理
  • 🧮 增量计算
  • 🧱 基于组件的软件开发

以及这些,带来了

  • 通过声明式代码实现响应式
  • 松散耦合和高可测试性
  • 通过依赖倒置的功能性方法实现应用级可组合性
  • 通过副作用实现功能组合

总结

在顶层定义你的“胶囊”(封装的状态块)

// Capsules are simply functions that consume a CapsuleHandle.
// The CapsuleHandle lets you get the state of other capsules,
// in addition to using a large variety of side effects.

// This capsule provides the count and a way to increment that count.
fn count_manager(CapsuleHandle { register, .. }: CapsuleHandle) -> (u8, impl CData + Fn()) {
    let (count, set_count) = register(effects::state(0));
    let count = *count; // the state side effect returns a &mut T
    let increment_count = move || set_count(count + 1);
    (count, increment_count)
}

// This capsule provides the count, plus one.
fn count_plus_one_capsule(CapsuleHandle { mut get, .. }: CapsuleHandle) -> u8 {
    let (count, _increment_count) = get(count_manager);
    count + 1
}

let container = Container::new();

let ((count, increment_count), count_plus_one) =
    container.read((count_manager, count_plus_one_capsule));
assert_eq!(count, 0);
assert_eq!(count_plus_one, 1);

increment_count();

let ((count, _), count_plus_one) = container.read((count_manager, count_plus_one_capsule));
assert_eq!(count, 1);
assert_eq!(count_plus_one, 2);

入门指南

只需运行: cargo add rearch rearch-effects

然后,为你的应用程序创建一个容器

use rearch::*;
use rearch_effects as effects;

fn main() {
  let container = Container::new();
  // Use the container.
}

查看示例,了解如何创建自己的胶囊!

文档

此外,还有一些WIP 文档,可以帮助你了解ReArch背后的核心概念!

最低支持的 Rust 版本 (MSRV)

当前MSRV是1.74.0,并可能在任何新的ReArch版本/发布中更改。

值得一提的是,上面“简要说明”中显示的示例需要每晚构建 unboxed_closuresfn_traits,这在 better-api 功能下是特性门控的。一旦 unboxed_closuresfn_traits 稳定下来,这个夜间构建的语法将成为首选语法,并且将不再受特性门控。(如果没有夜间构建,您必须调用稍微更冗长的 get.get(some_capsule)register.register(effect())。)

需要帮助!

尽管我已经在 ReArch 上做了很多工作,但总感觉还有很多事情要做。一个人的力量是有限的!

如果您想贡献力量,以下是我非常希望得到帮助的一些领域!

  • 文档(特别是内联文档!)
    • 如果您能添加代码示例/提高清晰度,将会非常感激。
  • 新的副作用!
    • 我已经根据需要创建了很多,但更多的将会更好。
    • 如果您发现自己反复使用自定义副作用,请考虑提交一个PR!其他开发者可能也会用到它。

赞助商

您可以通过此处成为我的工作的赞助商:这里

依赖项

~265–710KB
~17K SLoC