2014-06-20 91 views
0

我試圖達到以下情形的解決方案:構建的應用程序,以便它是模塊化

我有一個應用程序,允許有人來管理客戶端的地址簿/列表。 (MODULE CLIENTS)

有人使用它可能需要鏈接到客戶端的作業列表。 (MODULE JOBS)

其他人可能需要鏈接到客戶端和作業的屬性列表。 (MODULE PROPERTIES)

有沒有辦法讓這個你可以從字面上:

CLIENTSJOBS模塊在一個新的安裝,然後他們可以溝通

CLIENTSPROPERTIESJOBS模塊在全新安裝,然後他們可以溝通(客戶端 - >屬性 - >每個屬性或客戶端作業 - >作業)

甚至掉落CLIENTSPROPERTIES模塊在全新安裝中與客戶端/作業具有相似的場景。

我知道我將不得不在某處定義關係,但我正在設計它,以便我可以通過標準關係控制器(以及最好放置它們的位置)或通過配置文件來實現。

我不是純粹主義者,所以我非常高興在模塊中放置額外的控制器,但我只是想將流程流線化。

或者生產'填充物'模塊來填補空白,並用它們來構建視圖,會更好嗎?

我也想知道如何最好地構建視圖 - 我目前擁有它的方式是有一個視圖,然後是'視圖',這是視圖(表格,表格等)的各個組成部分 - 每一個pagelet) - >我只是通過Module :: Run調用頁面小程序(如果您習慣了codeigniter - >與'include'基本相同) - >這很好,但可能不是上述場景的最佳系統。

在此先感謝!

回答

0

模塊接線

除非你使用的是HMVC框架,可以「智能」處理的(模塊)這種風格的鏈接時,你將需要以某種方式「配置」或「線」了。雖然我不知道任何可以做到這一點的HMVC框架,但我會想象如果你需要將控制器編程爲某種形式的'界面'(術語鬆散地使用),那麼它就知道它們是如何聯繫起來的。

使用'非智能'框架,人們需要使用某種形式的全局配置文件或模塊配置文件(例如yaml,xml,php等)來解釋模塊之間的鏈接。再次,我不知道這樣一個HMVC框架。所有這一切說,這將是一個偉大的項目進行,它肯定會進一步移動HMVC框架的世界,雖然我懷疑這樣做可能會鬆動一些靈活性,主要是因爲語言編程控制器的方式(參數),每個模塊需要實現與另一個(控制器)通話或接口。

填充器模塊

我的優選的方法和其他框架(MVC和HMVC)的是有一個路線匹配到一個主控制器(你「填料」模塊)。然後,主控制器將其稱爲子控制器(模塊),並且如果需要的子控制器(更多'填充器'模塊)等,收集數據,填充它的視圖,然後返回工作方式(並在必要時返回再次下降),直到可以填充主視圖。

我已經創建了我自己的HMVC框架,可以根據基於Kohana框架的「請求」類來做到這一點。這個TechPortal鏈接描述了它如何以詳細而可理解的方式工作。

查看

的你的意見(或 '小頁')的架構聽起來是正確的。我稱他們爲面板。因此,使用輸出緩衝

  1. 主控制器的請求「(如果需要與傳遞給它的所有參數)的子控制器與子控制器響應設置爲變量。例如:

    // Create a new request to a controller. 
    $request = RequestFactory::createRequest(); 
    $request->controller('modules/customers/customers/controllers/[email protected]'); 
    $currentCustomers = $request->execute(); 
    
  2. 子控制器收集任何必要的數據,使得它在所述小網頁並返回它。

    // Instantiate the view object. 
    $view = new View(); 
    
    // Instantiate the customers model. 
    $customersModel = new CustomersModel(); 
    
    // Set the data. 
    $view->data('customers', $customersModel->getCustomers(), false); 
    
    // Set the template. 
    $view->template('modules/customers/customers/views/show_add_edit_delete'); 
    
    return $view->render(false); 
    
  3. 然後主控制器準備其數據並呈現其視圖。

    // Instantiate the view object. 
    $view = new View(); 
    
    // Set the panels. 
    $view->data('panel_1', $currentCustomers, false); 
    
    // Set the panels layout. 
    $view->partial('panels', 'views/html/secure/templates/panels/layout_2'); 
    
    // Set the template. 
    $view->template('views/html/secure/templates/application.php'); 
    
    // Render the page. 
    $view->render(); 
    

這個過程可以去深(嵌套的),因爲你需要它。

我希望這會有所幫助。