组件状态管理

何谓组件和容器

  1. 一个组件可以理解为UI重用的最小单位,它应该与业务逻辑不相关。
    可以理解纯组件,它的表现形式只有prop参数决定。 一旦其完成构造,应该是不可变的。

  2. 一个容器可以理解为UI状态管理的最小单位, 它与业务逻辑息息相关。
    可以理解管理组件的组件。

  3. GUI 应用应该由一个个组件像搭积木形成的一个个容器构成

无状态管理 (MV)

1
2
3
updateUI ( model -> UI)  // load

updateModel ( UI -> model) // save

UI.control.addListener(e-> updateModel())

UI状态维护困难,UI难以复用。

Binding机制view model (MVVM)

view与view model 双向绑定(data-binding):View的变动,自动反映在 ViewModel

  1. 定义domain 均为property

  2. view 与 viewModel 双向绑定

  3. view的变动仅反映在view model上(具体表现为property的变化),不需要通知其他view

  4. 只有在通过property 达不到的情况下才使用event bus.

  5. 双向绑定基于弱引用,Binding对象不会保持有双方的强引用,只有两个对象的弱引用
    你变我也变,我变你也变

  6. A单向bind B, 实际上是监听源B 对象添加一个监听器,该监听器强引用A,当B变化时,通知监听者A

故这里需要使用weak Listener, 防止由于data长期不销毁而导致view不销毁。

java fx中一切变化皆表现为property的变化

组件间通信

  1. 通过相互领域模型的bind

  2. event bus

父子组件通信

  1. scene graph 上节点

  2. event bus

旁系组件通信

  1. event bus