mcuking/mobile-web-best-practice

意见建议收集区

mcuking opened this issue · 18 comments

该 issue 专门用于收集大家对该项目的意见和建议,欢迎大家积极留言建议。
一个人的能力和精力是有限的,众人拾材火焰高,希望一起把这个项目做成 h5 写移动应用的最佳模板🤠

(如果是反馈 bug,还请另外开 issue)

关于 数据持久化 跟 全局的状态管理,是怎么设计的呢。有一个场景,不依赖indexedDB,作为数据来源。请求后端数据后生成一个总的表单对象,编辑新增删除,都是对这个对象操作。除了vuex在这个项目中能有什么思路吗

或者说 vuex 跟 实体,怎么更好的结合,各自的分工是什么,我有点模糊

不是很清楚您的意思,不过我说下我们公司里实际项目的应用情况吧:

首先目前新的项目都会单独分出来一个 npm 包命名为 core,用来抽离业务逻辑,分层和这个项目大致是一样的,不过因为逻辑并没有太复杂,所以没有单独的实体层。

然后 mobile 和 pc 的项目共用 core 包提供的,通过 lerna 去管理 mobile 和 pc 项目(当然也可以分开进行独立开发),结构大致如下

image

至于 vuex 也有应用,主要是管理一些需要放在全局的状态,例如 userInfo, cacheComponents(keepalive 生效的组件名数组,可以动态控制页面是否需要缓存)等等,所有的子应用共用这些全局状态,并没有放过多的业务逻辑。也就是说,vuex 和这种业务分层架构没有混用

不知道有没有解决你的困惑,有什么好想法也可以继续留言讨论~

能不能全面介绍下 core 这个目录下

@push-over

core 就是所有的非视图层,包括了 Services、 Interactors、Entities(如果有实体的话)三个层,下面是详细的介绍:

https://github.com/mcuking/mobile-web-best-practice#%E5%88%86%E5%B1%82%E6%9E%B6%E6%9E%84

Hi,打扰了

看您的 Blog 写的很用心,想有个机会和您共事

请问蚂蚁花呗借呗的机会要考虑一下吗

可以通过邮箱 lianming.wlm@alipay.com 和我联系

或者说 vuex 跟 实体,怎么更好的结合,各自的分工是什么,我有点模糊

你说的是一个数据持久化的问题,这块在 redux 里面有 redux-presist 这个库提供支撑。vue 的技术栈我不太熟,想必有类似的库,可以很容易的实现你的需求

总体来说原理其实比较简单,通过监听 store 中数据发生改变,来动态存储数据到本地存储。过去我们使用 Object.definePropoties 不过现在使用 Proxy API 可以很容易的实现这一点。

其实整个过程和 vue 的双向数据绑定类似。

另外你可能觉得每次数据改变都重新 reset 整个 store 对性能会造成浪费,这里可以研究一下数据结构中的 Immutable,在数据变化的时候仅更新 store tree 中的最小变化单元来避免极大数据量情况下的性能损耗,当然这个属于比较高阶的用法了

@Jemair 感谢这位阿里大佬的回答和赏识,后面想去的话会联系您哦~

@mcuking 把个人联系方式发到了你的 gmail 邮箱
可以加一下 保持联络

离线包的差分是针对上一版本的,如果用户缓存的当前版本是上上个或者更久的版本,那应该怎么处理?

离线包的差分是针对上一版本的,如果用户缓存的当前版本是上上个或者更久的版本,那应该怎么处理?

你可以在上传离线包到管理后台的时候,将版本向前3个版本做差分,比如上传版本 5,则和 2, 3, 4 版本做差分。
客户端缓存版本和线上版本之差超过 3 的时候,就直接下载版本 5 的全量包

离线包的差分是针对上一版本的,如果用户缓存的当前版本是上上个或者更久的版本,那应该怎么处理?

你可以在上传离线包到管理后台的时候,将版本向前3个版本做差分,比如上传版本 5,则和 2, 3, 4 版本做差分。
客户端缓存版本和线上版本之差超过 3 的时候,就直接下载版本 5 的全量包

感谢指教。还有个问题,是不是离线包上传的时候,全量包和差分包都要上传?

离线包的差分是针对上一版本的,如果用户缓存的当前版本是上上个或者更久的版本,那应该怎么处理?

你可以在上传离线包到管理后台的时候,将版本向前3个版本做差分,比如上传版本 5,则和 2, 3, 4 版本做差分。
客户端缓存版本和线上版本之差超过 3 的时候,就直接下载版本 5 的全量包

感谢指教。还有个问题,是不是离线包上传的时候,全量包和差分包都要上传?

不需要,只需要上传全量包就好,生成差分包功能是在离线包管理平台这个服务实现的

想问一下博主大佬,到了现在的话,这个最佳实践是否还有参考价值,有没有一些方案已经被更好的方案替代呢。

想问一下博主大佬,到了现在的话,这个最佳实践是否还有参考价值,有没有一些方案已经被更好的方案替代呢。

随着时间推移,其中有一些方案可能会有更好的替代品,所以这个问题不是很好回答你是还是不是,需要你自己去判断和比较。不过里面的一些想法还是会有一定的价值的~

感谢大佬,看你的源码还是学到了很多。

欢迎交流, 大家一起摸索前进!
以下是我个人的一些观点和建议

  • IOC,DI做全局的注入, 在程序入口做, 做在domain里会导致抽象和实现绑定了, 没有达到IOC的意图, 即推迟决定实现

  • entity这个单位很小, 建议你改换model. AggregateRoot可由1..n个entity组成.

  • 到了model这一层已经是最底层了, 实体不必要在使用接口了, 没有控制反转的需求了

  • service和repo最好也分开, service如果是领域服务那其实现也在domain中(一般就一个实现,不需要接口, 多实现是策略的时候), 但是repo的实现是在infrastructure层的, 如果service是防腐用实现可以在infrastructure层.

  • 前端场景控件逻辑要内聚, 组件内操作控件模型和视图模型以及应用服务组成组件的业务逻辑, 视图负责渲染即可.

@mcuking 一步你好,我看了“样式适配”一节,里面提到 vw 方案无法限制最大宽度,刚好我最近写了个屏幕适配插件,postcss-mobile-forever,可以利用 vw 限制最大宽度,而不使用 JS,请问能否在“样式适配”这一节采纳我这个插件。

如果有需要的话我也可以提一下适配插件之后的 PR,我看到这个项目里用的 vue-cli 内置的是 PostCSS 7 的版本,是否考虑升级 vue-cli 从而内置 PostCSS 8,我目前在持续维护 PostCSS 8 的 mobile-forever,虽然我也开发了基于 PostCSS 6 的 mobile-forever,但旧版本维护有点麻烦。

点击查看插件适配后,桌面端屏幕的展示效果。
首页 具有抽屉组件的页面
新建任务页面 新建任务集页面