🌳
变更事件冒泡
子节点的变更事件自动向上冒泡到父节点,携带完整路径信息,轻松追踪数据变化来源
dotnet add package Apq.ChangeBubbling<PackageReference Include="Apq.ChangeBubbling" Version="1.0.*" />using Apq.ChangeBubbling.Nodes;
// 创建节点树
var root = new ListBubblingNode<string>("Root");
var child = new ListBubblingNode<int>("Child");
// 建立父子关系
root.AttachChild(child);
// 订阅变更事件
root.NodeChanged += (sender, change) =>
{
Console.WriteLine($"变更: {change.PropertyName}, 类型: {change.Kind}, 路径: {string.Join(".", change.PathSegments)}");
};
// 子节点的变更会自动冒泡到父节点
child.Add(42);
child.Add(100);| 特性 | 说明 |
|---|---|
| 变更冒泡 | 子节点变更自动冒泡到父节点,携带完整路径 |
| Rx 响应式 | 支持 Observable 流、节流、缓冲、过滤 |
| 弱引用消息 | 避免内存泄漏,自动清理失效订阅 |
| 批量操作 | BeginBatch/EndBatch 收集并批量触发事件 |
| 事件合并 | BeginCoalesce/EndCoalesce 合并同属性多次变更 |
| 背压管线 | 基于 TPL Dataflow 的背压处理管线 |
| 快照服务 | 节点树快照导出与导入 |
| 线程安全 | 提供 ConcurrentBag/ConcurrentDictionary 节点 |
| 类型 | 描述 |
|---|---|
ListBubblingNode<T> | 基于列表的冒泡节点 |
DictionaryBubblingNode<TKey, TValue> | 基于字典的冒泡节点 |
ConcurrentBagBubblingNode<T> | 线程安全的列表冒泡节点 |
ConcurrentDictionaryBubblingNode<TKey, TValue> | 线程安全的字典冒泡节点 |
| 框架 | 版本 |
|---|---|
| .NET | 8.0, 10.0 (LTS) |