美文网首页
挖了个坑。。。

挖了个坑。。。

作者: alexlee002 | 来源:发表于2016-02-21 02:16 被阅读113次

    新年开始,掉到自个挖的坑里头了。。。

    去年年底开始计划重新整理一下目前项目中的一些底层公共库, 比如 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时, 需要做些特殊操作(比如某些字段值要做一些转换), 那么自动更新应该怎么实现?
        最符合像我一样比较喜欢偷懒的人的想法的, 就是默认使用自动更新, 但是又能有一个机制, 让我们能够对其中的某个过程插入特殊处理。 这又该如何实现?(// 这是过度设计么?//)

    相关文章

      网友评论

          本文标题:挖了个坑。。。

          本文链接:https://www.haomeiwen.com/subject/huwvkttx.html