2011-02-07 131 views
2

我正在研究一個應用程序,該應用程序將包含一個「庫」文件夾,該文件夾將包含自制的框架/庫(會話,數據庫,緩存,配置類型類),然後是一個「模塊」文件夾,其中將包含我的應用程序(即:博客/論壇/帳戶/等等)擴展核心PHP類而不是依賴注入?

在我的大部分模塊(博客,論壇等)中,我需要多個對象,如緩存,數據庫,記錄器,配置對象。我打算爲此使用依賴注入,但我很好奇,難道我只有一個核心類/對象,可以做我的數據庫,緩存,記錄器,時間,方法等東西,然後只是將這個核心類擴展到我的其他模塊類並可以訪問所有這些東西,而無需注入它們?

我很新的使用類/對象,所以我可能會離開這裏,請解釋。

回答

3

擴展類是有道理的,如果你專門類或,好了,延長他們。
如果擴展與基類的原始目的無關,它就沒有任何意義,並且通常會變得混亂。

例如,您可以使用DbMySql分類(專業化)或HtmlHelperHtml5Helper(擴展)擴展DbBase類。

您不應該將您的DbClass延伸到ProductsModule。兩者沒有任何關係。 ProductsModule並不固有地綁定到數據庫,所以你混合了彼此無關的責任。

0

CAN做什麼,正在創建一個Factory類,它實例化並提供您需要的單個對象。類似於:

$db = myFactory::getDBO(); 
$conf = myFactory::getConfig(); 
$session = myFactory::getSession(); 

等等。

+3

一個DI容器會更適合,f.e. http://components.symfony-project.org/dependency-injection/ – Gordon 2011-02-07 23:54:23

1

我也同意戈登。

我個人以避免工廠靜態方法的方法。實質上,它等同於使用全局變量。這是服務定位器反模式。

除了建議的DI容器,我發現手動依賴注入(即使用DI容器)是一種有價值的方法。沒有工具(即容器)可以設計您的課程鬆散耦合,我發現使用手動DI有助於專注於此。

[P.S.我會添加此作爲評論,但我是新的,無法評論]