2011-08-04 35 views
2

我正在使用Zend框架和Doctrine的小型內容管理系統(CMS)。爲了解釋我的問題,我創建了一個簡單的結構,在這裏我構建了兩個模塊(Admin,Frontsite),如下面的結構所示​​。zend框架中沒有冗餘的模塊化結構(不依賴於彼此)

application 
    - configs 
    - controllers 
    - models 
    - modules 
    - frontsite 
     - controllers 
      -FrontController 
      -shownewsAction() 
      ... 
      ... 
     - models 
     - views 
      ... 
     ... 
    - admin 
     - controllers 
      -NewsController 
     - models 
      -news (extends newsbase) 
      -newsbase 
     - views 
      ... 
     ... 
    - views 

管理模塊處理所有管理請求,而前端模塊處理來自訪問者的請求。如果我在管理模塊中創建模型(即新聞)並允許前端模塊的前端控制器訪問它。然後,我的一個模塊將可以依賴於另一個模塊。

據我所知,模塊化方法的一個目的是保持每個模塊不可靠,不依賴彼此。一個模塊可以在不影響架構中的任何模塊的情況下取下。那麼如果這是模塊化方法的目的之一,那麼我必須在前端模型中創建相同的模型(新聞)。這會導致我項目中的冗餘,這絕對不是面向對象設計的一部分,因爲它會達到它的可重用性目的。

第一種方法,是否需要創建另一個通用模塊,我將保留常見模型並允許其他模塊訪問它?這是否意味着我的某些模塊只有VC架構,並且會從通用模塊訪問模型?

我想到的第二種方法是創建某種服務層來幫助將一個模塊與另一個模塊進行通信,這不會相互依賴嗎?

另一種方法可能是將所有常用模型轉移到庫文件夾。所有模塊將從庫中訪問它們。通過這種方式,一些模塊將成爲VC模塊,但不會依賴於其他模塊。通過這種方式,我們可以提高可重用性,消除冗餘,並保持模塊不相互依賴。

行業慣例是什麼?任何專家意見!

我已經做了一些搜索在stackoverflow和谷歌獲得答案。但他們沒有一個正確回答我的問題。

某些搜索是

Search 1 Search 2 Search 3 Search 4

回答

2

我只是在做的正是在此刻同樣的事情。我已經使用'Admin'模塊和'Frontend'模塊設置了我的CMS。我將所有模型都保存在application/models中 - 不在任何一個模塊中。

由於模型並不僅僅適用於一個模塊,所以最好將它們放在結構中的「上方」模塊中。

我不知道你有什麼設置重新自動加載,但對於信息,我有這個在我的引導:

protected function _initAutoload() { 
    $autoloader = Zend_Loader_Autoloader::getInstance(); 
    ini_set('include_path', ini_get('include_path').";".APPLICATION_PATH); 
    $autoloader->registerNamespace('Models_'); 
    ...more code... 

} 
1

你可以把你的模型在

application 
    - configs 
    - controllers 
    - models (this is made to be shared between your module) 
    -news 
    -newsbase 

您可以訪問他們通過打電話給他們Model_News和Model_Newsbase

<?php class Model_News extends Model_Newsbase ?>