我正在嘗試確定一個系統的設計,這意味着可以提供很高的可擴展性。從我所知道的情況來看,抽象工廠等模式除了重複代碼(如下所示)外,不允許重寫基本方法。模塊化設計模式
我已經做了面向方面編程的一些初步研究,它似乎是沿着我正在尋找的線,但我有一個困難的時間包圍我的頭周圍的具體情況。
abstract class Object {
protected $object_id;
protected $name;
function LoadObjectData()
{
$file_contents = readfile('object'.$object_id.'.data');
$data = array();
// parse file contents into $data array...
return $data;
}
function Create()
{
$data = $this->LoadObjectData();
$name = $data['name'];
return $data;
}
}
class User extends Object {
protected $email_address;
function Create()
{
$data = parent::Create();
$this->email_address = $data['email_address'];
return $data;
}
}
//----------Module 1-MySQL Lookup-------------
/*
* Redefine Object::LoadObjectData() as follows:
*/
function LoadObjectData()
{
$data = array();
$result = mysql_query("SELECT...");
// construct array from result set
return $data;
}
//----------Module 2-Cache Machine-------------
/*
* Redefine Object::LoadObjectData() as follows:
*/
function LoadObjectData()
{
if (exists_in_cache($object_id)) {
return get_cached_object($object_id);
}
$data = parent::LoadObjectData();
cache_object($object_id, $data);
return $data;
}
(這是不大不小的壞榜樣的,但希望它有助於獲得跨越我的觀點)
的對象系統將有可用的方法非常大的比例進行擴展,我想盡量減少開發人員的額外工作量和學習時間。
AOP究竟是我正在尋找的,還是有更好的方法來處理這個問題?
謝謝!
在這個例子中,緩存的意圖或從數據庫加載的意圖是設計的。但是,我們假設另一個開發人員已經開發了模塊(模塊1和模塊2)以修改原始程序流程。是的,實際上一個設計良好的應用程序將包含一個本地緩存,但這僅僅是一個例子。你的方法很有趣,但不允許多個擴展,也不回答與現有設計模式有關的問題。不過謝謝。 – Godwin 2012-01-14 03:25:03
它允許無限的擴展。只需傳遞要加載的擴展名,基類將加載它,創建它的一個實例並返回實例。像這樣的設計允許所有的擴展/插件由基類(工廠)管理,如果需要的話,強制所有的擴展單元都是單例。插件可能會重載基類中的任何方法,這會修改基類的行爲。 – 2012-01-14 23:31:18