挖了个坑。。。
2016-02-21 本文已影响113人
alexlee002
新年开始,掉到自个挖的坑里头了。。。
去年年底开始计划重新整理一下目前项目中的一些底层公共库, 比如 model mapping, database manager, network manager 等, 本来以为这是一个工作量很小的活儿, 稍微做些代码整理优化就可以, 结果坑大了。
设计目标:
- Model Mapping
- JSON - Model mapping: YYModel √
- DB - Model mapping,支持 active record:进行中
- Database Manager
- 支持一个 app中有多个数据库
- 支持用户相关的数据库(用户切换, 数据库也切换)
- 数据结构版本更新
- network
遇到的坑:
- model 和数据表的映射关系: 一个 model 对应多个表, 或者多个 model 对应一个表, 这个怎么实现自动映射?
- active record, 如何实现子查询?
- 数据版本更新: 比如应用的某个版本修改了 model 的结构, 那么 model 对应的数据库表也需要更新。 目前有两种方案:
- 手动更新: 我们当前项目用的是手动更新, 也就是数据库维护一个版本号, 当版本号发生变化时, 调用onUpdate 函数逐个版本更新。 用户需要在这个函数里边把每个版本的更新操作手工写下来, 比如版本1->2, A 表增加了a1字段,等等。优点是比较灵活, 数据安全性有保障。
- 自动更新: 也就是现在好多 active record 库使用的方式, 根据当前 model 的结构, 和对应的数据表进行比对, 然后把新增的 column 添加到数据表中。 应该说绝大部分情况, 自动更新都能满足,但是有些情况, 比如用户手机上的数据库版本是1, 但是目前app 的数据库版本已经是5, 但是在从版本2更新到版本3时, 需要做些特殊操作(比如某些字段值要做一些转换), 那么自动更新应该怎么实现?
最符合像我一样比较喜欢偷懒的人的想法的, 就是默认使用自动更新, 但是又能有一个机制, 让我们能够对其中的某个过程插入特殊处理。 这又该如何实现?(// 这是过度设计么?//)