moodle架构分析—数据连接层的设计(一)

moodle架构分析—数据连接层的设计(一) 序:上一段时间帮人分析过moodle架构,梳理堆砌了一些文字资料,这里放上来,供大家参考。如有错误或遗漏的地方,请各位指正…

moodle架构分析—数据连接层的设计(一)

序:上一段时间帮人分析过moodle架构,梳理堆砌了一些文字资料,这里放上来,供大家参考。如有错误或遗漏的地方,请各位指正。

1、数据连接抽象类ADOConnection

Moodle支持Mysql、Oracle、SqlServer等多种数据库。由于不同的数据库操作有所不同,为支持多种数据库,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下面。如SqlServer数据库的实现在lib/adodb/drivers/adodb-mssql.inc.php文件里面,Mysql数据库的实现在lib/adodb/drivers/adodb-mysql.inc.php等等。

如:

classADODB_mysqlextendsADOConnection{}

classADODB_mssqlextendsADOConnection{}

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();

这样,数据库连接对象就创建好了。

 

更多Moodle信息http://www.aieln.com/system/moodle/

作者: admin

为您推荐

联系我们

联系我们

邮箱:

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部