2012-05-25 47 views
0

嗨,大家好,我試圖把我的頭圍繞接口應該保持的位置。PHP/Zend程序體系結構和接口

一個例子:

我有一個Zend MVC多模塊應用程序,我一直在努力,並希望把它清理乾淨(它是一個真正的混亂)

模型對象包括但不限於:

Model_Order 
Model_Order_Item 
Model_Order_Item_Location 
Model_Product 
Model_Customer 
Model_Warehouse 
Model_Warehouse_Location 
Model_Warehouse_Location_Position 

dependencies include: 

Model_Order : Model_Order_Item (1 order to many items), Model_Customer (many orders to one customer) 

Model_Order_Item : Model_Product (1 item has 1 product) 

Model_Product : Model_Warehouse_Location_Position (a product could have many positions), Model_Customer (one to one relationship) 

Model_Warehouse : Model_Warehouse_Location (one warehouse could have many locations (or bins) and different types) 

Model_Warehouse_Location : Model_Warehouse_Location_Position (one location many product positions) 

many of these are dependencies that traverse in both directions. 

所以我的問題如下。

說到接口,以下哪一項比較合適?

Model_Order_Item_Product_Interface 
Model_warehouse_Location_Position_Product_Interface 

內部Model_Order_Item可以是方法setProduct(Model_Order_Item_Product_Interface $產品)

內部Model_warehouse_Location_Position可以是方法setProduct(Model_warehouse_Location_Position_Product_Interface $產品)

然後模型對象將是

Model_Product implements Model_Order_Item_Product_Interface, Model_warehouse_Location_Position_Product_Interface 

我有一個接口概述產品(Model_Product_Interface)

和內部Model_Order_Item的方法可以是setProduct(Model_Product_Interface $產品) 但這意味着訂單需要它的「命名空間」之外的接口。 (BUT!而不是現在產品正在尋找它的「命名空間」之外讓所有它必須適合於該接口)

我不是100%肯定在哪裏把這些接口的

從域角度看作爲4個分離的團體訂單,產品,倉庫和客戶。具有設計在「模塊」/組內的接口是更好的,因爲它與此直接相關.......

我的大腦可以在這個問題上循環。我猜它更多的是個人喜好?

在一個側面說明我還打算用一個單獨的ServiceLocator返回奉獻給每組服務,並交回工廠和數據訪問對象(與其他服務相關的方法一起)在引導

我的想法是, zend我會盡我所有的依賴注入,所以我在一個地方。

我很感激你可以給我的任何建議。

+0

你的問題似乎表明你不完全理解接口和類的使用。 'Model_Order_Item_Product_Interface'看起來像什麼?也許將這些接口中的一個作爲示例將使我們能夠爲您提供更多幫助。 – vascowhite

回答

0

您應該問的第一個問題是:

此界面的所有者是誰?產品?

Product_Model_Interface_Name

/modules/product/models/interface/Name.php

爲什麼?

通過這種方式,您將很容易看到誰擁有使用哪種模型進行創作。

但是,如果你在談論一個通用的接口,那麼你必須如果您使用的通用界面,你會創建一個庫

/library/MyApplication/Models/Interface/Name.php

需要在您的引導程序中配置自動加載

+0

我所有的模型都在我的庫中,我已經自動加載它們,這不是問題。 我只是想了解將它們分組的過程更好。 – user966936

0

我只是把它們放在接口目錄的庫中,所以它們不會混亂我的模型目錄。我用我的圖書館中的結構模仿ZF 1.x的應用程序結構:

/library 
    /namespace 
     /Application 
      /Controller 
       /Plugin 
      /Interface 
      /Model 
       /Entity 
        /Abstract.php 
       /Mapper 
        /Abstract.php 
      /Resource 
      /View 
       /Helper 

我知道這是一個有點深沉而忙碌,但它讓我組織。當我更改爲ZF2時,我將不得不重新評估以實現名稱空間。