2006/11 27
由于sugarOS考虑了PHP4的兼容性,虽然代码架构中在设计模式上表现不错,但由于缺少很多的面向对象关键字,比如(public,private abstract)等,也缺少一些面向对象的功能,如(interface)等。这在很大程度上影响了代码的可阅读性以及限制了一些设计模式的使用。
比如如下代码段:
[PHP]
class DBManager
{
var $helper;
var $tableName;
var $database = null;
var $dieOnError = false;
var $encode = true;
var $query_time = 0;
var $lastmysqlrow = -1;
var $last_error = '';
var $lastResult = array ();
function DBManager()
{

global $sugar_config;

$my_db_helper = 'MysqlHelper';
if ($sugar_config['dbconfig']['db_type'] == "oci8")
{

}
if ($sugar_config['dbconfig']['db_type'] == "mssql")
{
$my_db_helper = 'MssqlHelper';
}
static $helper;
if (empty ($helper))
{
$helper = new $my_db_helper ();
}
$this->helper = $helper;
}

function & getInstance($instanceName = '')
{
global $sugar_config;
static $count;
static $old_count;
global $dbinstances;

$instanceName = 'db';
$config = $sugar_config['dbconfig'];

if (!isset ($dbinstances))
{
$dbinstances = array ();
}

if (!isset ($dbinstances[$instanceName]))
{

$my_db_manager = 'MysqlManager';
if ($config['db_type'] == "oci8")
{

}
else
if ($config['db_type'] == "mssql")
{
$my_db_manager = 'MssqlManager';
}
if (!empty ($config['db_manager']))
{
$my_db_manager = $config['db_manager'];
}

DBManagerFactory :: load_db_manager_class($my_db_manager);
$dbinstances[$instanceName] = new $my_db_manager ();
$dbinstances[$instanceName]->connect($config, true);
$dbinstances[$instanceName]->count_id = $count;
$dbinstances[$instanceName]->references = 0;
$dbinstances[$instanceName]->helper->db = $dbinstances[$instanceName];

}
else
{
$old_count++;
$dbinstances[$instanceName]->references = $old_count;

}

return $dbinstances[$instanceName];
}
//MORE
}
[/PHP]
DBmanager是一个抽象类,也是一个单例类,故DBmanager类声明应该是abstract class, 构造函数好像不该出现或者是private,getInstance函数也该是static等等,这样,对于设计模式的理解更方便些。
我准备对其重构了,不是为了使用或者速度,仅仅是把代码改一改,使它更象一个面向对象的系统。
当然,一开始改,PHP4支持肯定就挂掉了。
Defined tags for this entry: , , , ,

Posted by rollenc

0 Trackbacks

  1. No Trackbacks

3 Comments

Display comments as(Linear | Threaded)
  1. 三马 says:

    如果面对对象的话,就不要考虑php4了,毕竟php6都快要出来了。

    Comments ()

  2. dangjh says:

    我也在学习SUGAROS,认识你很高兴。

    Comments ()

  3. rollenc says:

    楼上那位兄台,加入GTAL好友了:)

    Comments ()

Add Comment


You can use [geshi lang=lang_name [,ln={y|n}]][/lang] tags to embed source code snippets
E-Mail addresses will not be displayed and will only be used for E-Mail notifications