何谓组件和容器
一个组件可以理解为UI重用的最小单位,它应该与业务逻辑不相关。
可以理解纯组件,它的表现形式只有prop参数决定。 一旦其完成构造,应该是不可变的。一个容器可以理解为UI状态管理的最小单位, 它与业务逻辑息息相关。
可以理解管理组件的组件。GUI 应用应该由一个个组件像搭积木形成的一个个容器构成
无状态管理 (MV)
1 | updateUI ( model -> UI) // load |
UI.control.addListener(e-> updateModel())
UI状态维护困难,UI难以复用。
Binding机制view model (MVVM)
view与view model 双向绑定(data-binding):View的变动,自动反映在 ViewModel
定义domain 均为property
view 与 viewModel 双向绑定
view的变动仅反映在view model上(具体表现为property的变化),不需要通知其他view
只有在通过property 达不到的情况下才使用event bus.
双向绑定基于弱引用,Binding对象不会保持有双方的强引用,只有两个对象的弱引用
你变我也变,我变你也变- A单向bind B, 实际上是监听源B 对象添加一个监听器,该监听器强引用A,当B变化时,通知监听者A
故这里需要使用weak Listener, 防止由于data长期不销毁而导致view不销毁。
java fx中一切变化皆表现为property的变化
组件间通信
通过相互领域模型的bind
event bus
父子组件通信
scene graph 上节点
event bus
旁系组件通信
- event bus