mmlpxjs / mmlpx

🐘 mobx model layer paradigm
MIT License
180 stars 10 forks source link

api文档完善建议 #3

Closed xiaodongzai closed 6 years ago

xiaodongzai commented 6 years ago

postConstruct,instantiate 这两个api文档中缺少使用说明,建议完善下。

kuitos commented 6 years ago

instantiate postConstruct Thanks!

xiaodongzai commented 6 years ago

ok

初始化方法直接放在ViewModel的constructor中和使用postConstructor有什么区别吗?

kuitos commented 6 years ago

目前没有行为上的区别(以后不一定)。从严格的语义来讲,constructor只应该包含类成员的数据初始化,而不应该触发副作用。副作用应该由 bean 的生命周期钩子来完成,这里就是 postConstruct

xiaodongzai commented 6 years ago

明白了,多谢

xiaodongzai commented 6 years ago

postConstructor只适用于ViewModel,而Store没有提供,Store中可能还是有这种适用场景的?还是说Store中只应该有数据初始化,不应该有副作用。

kuitos commented 6 years ago

我想了一下,这里的设计可能要调整一下。有些地方跟我早期的想法有点不一样。 应该是只为 Store 提供 postConstruct,而 ViewModel 不提供。

在目前的业务组件开发中,ViewModel 角色基本与组件的 LocalState 角色重叠了,即 ViewModel ≈ React/Vue/Angular Class Component ≈ AngularJS Controller,没必要将 ViewModel 从 class component 中独立出来增加分层负担。ViewModel 也就能自然的获得随组件生命周期存活的能力,而不需要额外的 connector(mmlpx-xxx)之类。

相反的 Store 有初始化后 lazy evaluation 但没有 post destroy 的需求。

kuitos commented 6 years ago

released v4.0.0

xiaodongzai commented 6 years ago

ViewModel 也就能自然的获得随组件生命周期存活的能力

也就是说大多数ViewModel仅适用于一个ContainerComponent。不过针对一些特殊场景,应该也可以设计通用的ViewModel,同一份数据对应多个不同的View展示。

xiaodongzai commented 6 years ago

相反的 Store 有初始化后 lazy evaluation 但没有 post destroy 的需求。

这个post该怎么理解,包括postConstruct,为什么不用init,有什么语义上的区别?

kuitos commented 6 years ago

也就是说大多数ViewModel仅适用于一个ContainerComponent。不过针对一些特殊场景,应该也可以设计通用的ViewModel,同一份数据对应多个不同的View展示。

是可以的。

这个post该怎么理解,包括postConstruct,为什么不用init,有什么语义上的区别?

post 对应的是 pre。post construct/destroy 指的是方法在组件 初始化/销毁 完成之后触发。

xiaodongzai commented 6 years ago

thanks~