数据持久化
想要软件或系统重启后不丢失的数据需要做数据持久化,可以保存到数据库、文件等里面。
数据持久化一般有两种:
- DBHelper:这种比较经典,就是写一个类专门负责数据库各种操作,比如增删改查等等方法,然后其余的类调用,一般是传入一个SQL语句,然后执行语句、查询返回表格之类的。
- ORM:为了解决关系型数据库和对象型编程语言之间的冲突,把关系型数据库封装成业务实体对象,操作业务对象不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。
对比DBHelper和ORM
比如有两张表class班级表和student学生表,现在要查询学生表中id为1的学生的班级名,执行下面的非对象化(也就是结构化)查询操作:
DBHelper
//这些是数据访问层
String sql = "select class.name from class,student where student.id=1 and student.classid=class.id"
//这些是业务逻辑层
DataTable db = DBhelper.Query(sql)
String className = db.Rows[0][0];
可以看到数据访问层和业务逻辑层融合到一起了,这也是一般小项目业务逻辑层与数据访问层混合不清的原因。
对象关系映射(ORM)
//这些都是业务逻辑层
StudentModel student = new StudentModel();
String className = student.queryStudent(1).getclass();
//这些是数据访问层
class StudentModel
{
String class{set;get;}
queryStudent(String id)
{
//...
}
}
班级通过一对多映射被自动映射到student对象中,不过我们需要自己写StudentModel模型的各种属性和方法。而StudentModel也就是数据访问层。
现在使用上述两种数据模型
缓存
把磁盘上的需要频繁读取的文件保存在内存中,提高之后的读取速度,或者是把网上的远程内容先下载到本地,提高本地读取的速度等。
业务逻辑层
组织
数据访问层+
模式
各种设计模式,工厂、策略、适配器……