surveys.com.cn
moodle架构分析---数据连接层的设计(一)
  • 提交:天一
  • 时间:10-05-17 10:30
  • 更新:10-05-17 10:30
 序:上一段时间帮人分析过moodle架构,梳理堆砌了一些文字资料,这里放上来,供大家参考。如有错误或遗漏的地方,请各位指正。

    


    1、数据连接抽象类ADOConnection



Moodle支持MysqlOracleSql Server等多种数据库。由于不同的数据库操作有所不同,为支持多种数据库,Moodle定义了数据库连接抽象类ADOConnection



//抽象数据库连接类ADOConnection


class ADOConnection {}



ADOConnection定义了连接、断开连接(Close)、事务处理(BeginTransCommitTransRollbackTrans等)、错误异常处理、CURDGetOneSelectLimitAutoExecute等)、缓存机制(CacheFlushCacheSelectLimitCacheExecute)、锁机制等。更加详细实现见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等等。



如:


class ADODB_mysql extends ADOConnection {}


class ADODB_mssql extends ADOConnection {}




   3数据库连接对象的实例化



现在,我们已经拥有了数据连接接口与实现,可以说,数据访问层的主体已经完成。留给我们的还有一下两个问题需要解决。


l 数据连接对象创建的管理


l 考虑利于数据库迁移的设计


在前面的设计中,数据连接对象已经被抽象为对应的接口ADOConnection,它们的实现根据数据库的不同而有所区别,也就是说,创建的对象有多种类型,每种类型又有不同的实现,这是典型的抽象工厂模式的应用场景。这也是上述两个问题的解决之道。


为此,Moodleconfig.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();



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

文章推荐

    Loading...

人气排行

    Loading...
[ 简体中文 ] [ 简改蓝 ] 管理模式
Copyright ©2005 - 2008 www.emoodle.org
Processed in 0.131(s) Powered by Hutula 1.0

浙ICP备08007391号-1