moodle架构分析数据连接层
更新时间:2023-09-13 12:13:01 阅读量: 教学研究 文档下载
- 大数据技术架构分析推荐度:
- 相关推荐
序:上一段时间帮人分析过moodle架构,梳理堆砌了一些文字资料,这里放上来,供大家参考。如有错误或遗漏的地方,请各位指正。
1、数据连接抽象类ADOConnection
Moodle支持Mysql、Oracle、Sql Server等多种数据库。由于不同的数据库操作有所不同,为支持多种数据库,Moodle定义了数据库连接抽象类ADOConnection。
//抽象数据库连接类ADOConnection classADOConnection {}
ADOConnection定义了连接、断开连接(Close)、事务处理(BeginTrans、CommitTrans、RollbackTrans等)、错误异常处理、CURD(GetOne、SelectLimit、AutoExecute等)、缓存机制(CacheFlush、CacheSelectLimit、CacheExecute)、锁机制等。更加详细实现见lib/adodb/adodb.inc.php文件。 2数据库连接抽象类ADOConnection的具体实现
Moodle针对各种具体的数据库定义了ADOConnection抽象类的实现,这些实现都放置在文件夹lib/adodb/drivers下面。如Sql Server数据库的实现在lib/adodb/drivers/adodb-mssql.inc.php文件里面,Mysql数据库的实现在lib/adodb/drivers/adodb-mysql.inc.php等等。
如:
classADODB_mysql extends ADOConnection {} classADODB_mssql extends ADOConnection {} 3数据库连接对象的实例化
现在,我们已经拥有了数据连接接口与实现,可以说,数据访问层的主体已经完成。留给我们的还有一下两个问题需要解决。
l数据连接对象创建的管理 l考虑利于数据库迁移的设计
在前面的设计中,数据连接对象已经被抽象为对应的接口ADOConnection,它们的实现根据数据库的不同而有所区别,也就是说,创建的对象有多种类型,每种类型又有不同的实现,这是典型的抽象工厂模式的应用场景。这也是上述两个问题的解决之道。
为此,Moodle在config.php中定义了数据库连接字符串来实现“依赖注入”。
$CFG->dbtype = 'mysql';
$CFG->dbhost = 'localhost';
$CFG->dbname = 'course_center'; $CFG->dbuser = 'root';
$CFG->dbpass = 'heshaoyue'; $CFG->dbpersist = false; $CFG->prefix = 'mdl_';
接下来,在lib/setup.php中进行数据连接对象的实例化。即通过代码: $db = &ADONewConnection($CFG->dbtype);
实现了创建具体的数据库连接,ADONewConnection的部分实现如下。
$cls = 'ADODB_'.$db;
if (!class_exists($cls)) { adodb_backtrace(); return $false; }
$obj = new $cls();
这样,数据库连接对象就创建好了。
ORM的实现
Moodle在lib/dmllib.php中实现了ORM机制。常用的函数及用法如下: //查询$table中符合条件的记录是否存在
functionrecord_exists($table, $field1='', $value1='', $field2='', $value2='', $field3='', $value3='');
//获取$table中符合条件的记录
functionget_record($table, $field1, $value1, $field2='', $value2='', $field3='', $value3='', $fields='*') ;
//插入数据对象$dataobject到$table中
functioninsert_record($table, $dataobject, $returnid=true, $primarykey='id') ; 这些函数遍布moodle业务逻辑层的各个角落。由于数据库连接对象的存在,屏蔽了底层数据库之间的差异,使得这部分的实现就变得异常简单。在需要使用数据库连接对象之前,只首先引用lib/setup.php中创建的$db对象,
global $db;
即可调用底层数据库操作了。 下面以insert_record来说明。
functioninsert_record($table, $dataobject, $returnid=true, $primarykey='id') { //引用$db对象
global $db, $CFG, $empty_rs_cache;
//中间省去SQL语句生成的部分和缓存部分
/// 执行插入操作
if (!$rs = $db->Execute($insertSQL)) {
debugging($db->ErrorMsg() .'
'.s($insertSQL)); if (!empty($CFG->dblogerror)) {
$debug=array_shift(debug_backtrace());
error_log(\\in {$debug['file']} on line {$debug['line']}. STATEMENT: $insertSQL\
} return false; }
//省去其他部分
}
正在阅读:
moodle架构分析数据连接层09-13
勾股定理复习课例分析01-28
规模经济论文企业规模论文10-22
初级会计职称经济法基础课后练习06-04
(最新精编)2015年春 苏教版六年级下册劳动与技术教案(全册)05-31
部编版三年级语文下册一课一练-9 古诗三首 第3课时(含答案)【最新版】04-27
近年来国内外社会共识问题研究综述09-16
第二十二集团军出川抗战八年经过概述06-08
洞口乡涉军群体稳控工作汇报09-15
天津学位英语高频短语精讲精练06-27
- 公务员上岸同学告诉你,怎样走出面试中常见的十大误区
- 作表率,我们怎么办(办公室主任)
- 乘务员安全责任书
- 增员面试流程
- 河南省焦作市规模以上租赁和商务服务业企业应付职工薪酬数据洞察报告2019版
- 最新4社区工作者面试题
- 个人简历表
- 男教工体检必检项目
- 河南省兰考县规模以上租赁和商务服务业企业应付职工薪酬数据洞察报告2019版
- 兼职译员测试稿
- 河南省开封市规模以上租赁和商务服务业企业应付职工薪酬数据洞察报告2019版
- 永州职业技术学院校园总体规划-永州职业学院
- 最新5、培训科长笔试题(答案)
- 2019雅商酒店境外人员登记培训稀有资料,不可错过
- 小学教师求职简历范文
- 红酒知识与礼仪
- 春节给领导拜年的短信拜年词
- 2019年上半年中小学教师资格证结构化面试真题1
- 20XX年县干部培训工作目标
- 硬笔试听课
- 架构
- 连接
- 分析
- 数据
- moodle
- 内蒙古科技大学毕业设计手册闫晓刚0872146120
- 浅谈音乐心理学在音乐实践活动中的影响
- 纪检监察知识题库—多选题(98题)
- 《列王记上》注释正文第四章
- 三年级阅读找中心句
- 鱼类学生态学
- 字形相近字汇总(短句快速记忆)
- 模拟器教程
- 生理学试题
- 公共关系学模拟试题一(含答案)
- 井下作业公司2011年工作总结及2012年工作安排
- 三十二项制度
- 环评爱好者论坛 - 舟山港老塘山港区五期工程环境影响报告
- 产科护理常规
- 参加全县纪检监察干部培训班心得体会
- 《数风流人物,还看今朝》演讲稿(精)
- 七年级地理下册 6.2 亚洲复杂的气候教案(新版)新人教版
- 年产1000吨阿斯巴甜项目可行性研究报告(目录) - 图文
- 苏果物流配送中心运营模式探析
- 我国影子银行的发展和监管对策