为了紧跟技术潮流,目前的项目开始采用ORM的思想进行重新设计。

数据库采用轻量级ORM框架LitePal,Json解析采用Gson,网络框架采用Volley。
如果只是单纯的将这些第三方框架引进来,事情就简单多了,但这样意义不大,所以我们就结合项目的需求探索这三者的结合方案。
Volley的改造比较大,结合了OkHttp,在API方面采取了链式调用的方式,可以像这样写代码:
Volley.url("").params("", "").done().fail()
Gson主要是和LitePal进行结合。
这里有个问题:业务对象和表对象一般都是不对应,所以Gson转换来的对象不能直接存进表里面,中间要有个转换。
当然,简单的方法就是声明一个业务对象,Gson直接转换为业务对象,然后再存进表对象。但这样的话,业务对象里一定有很大的代码量都是用来存取数据,因为只能通过getter和setter来执行。
于是Gson就转换为表对象,然后在业务对象中绑定表对象,由表对象执行数据库相关操作:
User user = gson.fromJson(json, User.class);
UserEntity entity = new UserEntity();
entity.save(user);
public class UserEntity{
pivate DataBinder<User> dataSet;
public boolean save(User user){
return dataSet.save(user);
}
} public class DataBinder<T>{
public boolean save(T table){
return table.save();
}
}
使用LitePal的好处就是对象即为表,只需在XML文件中配置好,就可以像是操作对象一样操作表。
当然,接口返回来的数据不一定能够完全转换为表对象,所以需要利用Gson的转换器Adapter进行转换。
如果不想在自己的Activity和Fragment中写转换代码,可以自定义Volley的Request,这样就可以保证Activity和Fragment的代码更加简洁清晰。
如果不想这么设计,我们只能采用这样的流程:
接口数据 ---> Gson ---> Entity ---> Table
其中,Entity就承载了业务操作和数据库操作,比较重,但Gson这里就简单多了。
现在的设计是这样的:
接口数据 ---> Gson ---> Adapter ---> Table
                                                         | (DataBinder)                
                                               ---> Entity
Adapter负责Gson的转换,Table负责数据库操作,Entity负责业务操作,而Entity持有Table对象的引用,所需的数据库操作都通过Table对象,这样虽然类多了,但职责清晰多了。
当然,这只是我们的尝试,也许有更好的设计可以取代它。

LitePal + Gson + Volley的ORM框架尝试方案的更多相关文章

  1. Litepal【开源数据库ORM框架】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 好用的数据库框架. 效果图 代码分析 本篇主要是整理Litepal的引入和增删改查的简单操作,具体使用请阅读参考资料. 使用步骤 一 ...

  2. LitepalNewDemo【开源数据库ORM框架-LitePal2.0.0版本的使用】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本Demo使用的是LitePal2.0.0版本,对于旧项目如何升级到2.0.0版本,请阅读<赶快使用LitePal 2.0版本 ...

  3. 手把手撸套框架-ORM框架的选择

    目录 一,为什么选择SqlSugar? 在.net core ORM框架中,能选择的方案其实有很多,包括以下方案: 1,EF-Core 2,Dapper 3,FreeSql 4,SqlSugar 为什 ...

  4. .Net开源微型ORM框架测评

    什么是ORM? 对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间 ...

  5. 细数.NET 中那些ORM框架 —— 谈谈这些天的收获之一

    细数.NET 中那些ORM框架 —— 谈谈这些天的收获之一(转) ADO.NET Entity Framework        ADO.NET Entity Framework 是微软以 ADO.N ...

  6. 数据库ORM框架GreenDao

    常用的数据库: 1). Sql Server2). Access3). Oracle4). Sysbase5). MySql6). Informix7). FoxPro8). PostgreSQL9) ...

  7. ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】4.5

    摘要:VB/C#.Net实体代码生成工具(EntitysCodeGenerate)[ECG]是一款专门为.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的程序代码基于OO.ADO.N ...

  8. Spring事务管理--多个ORM框架在使用时的情况分析

    公司的项目已经接近尾声了,总结一下项目中用到的技术,我发现项目中的有些东西还是挺模糊的,只是知道这么用就行了.并不清楚其中的原理.由于公司的项目比较老,是7年前的一个项目了,中间一直有人在维护,也是在 ...

  9. PHP ORM框架与简单代码实现(转)

    对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据 ...

随机推荐

  1. Asp.Net正在中止线程引发的问题

    背景: Asp.Net做的一个同步程序,同步的方法是通过JQuery的Ajax调用,同步过程大概要执行20多分钟,程序部署到服务器后执行一段时间后就弹出执行失败的对话框,日志记录的错误信息是“正在中止 ...

  2. ThinkBox DOC

    插件源码下载 @github https://github.com/Aoiujz/ThinkBox.git 插件使用方法 引入文件 //使用ThinkBox弹出框必须引入以上三个文件. //jQuer ...

  3. Mac地址绑定的wifi

    可以仿冒mac地址连接到wifi. 1.首先使用cdlinux扫描ssid,抓握手包--当捕获某个连接该wifi的client的时候,记下该client的mac地址. 2.用eswa解码抓包文件,获取 ...

  4. C# 汉字转拼音 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母

    代码参考该文http://www.cnblogs.com/yazdao/archive/2011/06/04/2072488.html VS2015版本 1.使用Nuget 安装 "Simp ...

  5. EF5.0增删改查的写法及执行Sql的方法

    public T AddEntity(T entity) { //EF4.0的写法 添加实体 //db.CreateObjectSet<T>().AddObject(entity); // ...

  6. 使用Ant编译提示Class not found: javac1.8

    无论是使用Eclipse还是使用Ant命令,都可能会在编译时遇到提示:Class not found: javac1.8 今天用Ant打包Android,apk,运行出现了batch_build.xm ...

  7. Mac OSX系统下SVN客户端SCPlugin问题

    装上SCPlugin后,Checkout老是出现这种错误: Server certificate verification failed: certificate issued for a diffe ...

  8. Glide.centerCrop()第一次显示无效

    Glide.with(context)      .load(url)      .centerCrop()     /** fitCenter() */      .placeholder(R.mi ...

  9. LoadRunner11.52发布,全新的VTS

    LoadRunner11.52发布,全新的VTShttp://automationqa.com/forum.php?mod=viewthread&tid=2252&fromuid=2 ...

  10. 轻量级容器Docker+微服务+RESTful API

    [宗师]李锟(44035001) 10:23:03感觉Docker这样的轻量级容器+微服务+RESTful API三者可以形成一个铁三角.这也代表了PaaS未来的发展方向. [宗师]李锟(440350 ...