0

嗨,伙计们,我正在努力思考应该保留接口的位置。

一个例子 :

我有一个我一直在研究的 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 $product)

Model_warehouse_Location_Position 里面可能是一个方法 setProduct(Model_warehouse_Location_Position_Product_Interface $product)

那么模型对象将是

Model_Product implements Model_Order_Item_Product_Interface, Model_warehouse_Location_Position_Product_Interface

或者

我有一个概述产品的界面(Model_Product_Interface)

并且在 Model_Order_Item 内部可能是方法 setProduct(Model_Product_Interface $product) 但这意味着订单需要在其“命名空间”之外的接口。(但是!相反,现在产品正在寻找其“命名空间”之外的所有接口以获取它必须适应的所有接口)

我不是 100% 确定把这些接口放在哪里

从领域的角度来看,将其视为 4 个独立的组订单、产品、仓库和客户。在“模块”/组中设计接口会更好,因为它与此直接相关......

我的思想可以在这个主题上循环。我猜它更多的是个人喜好?

在旁注中,我还打算使用单例服务定位器来返回专用于每个组的服务,并将返回工厂和数据访问对象(以及其他与服务相关的方法)

我的想法是在 zend 的引导程序中,我会在那里进行所有的依赖注入,所以我把它放在一个地方。

我很感激你能给我的任何建议。

4

2 回答 2

0

我只是将它们放在接口目录中的库中,因此它们不会弄乱我的模型目录。我在我的库中使用了一个模仿 ZF 1.x 应用程序结构的结构:

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

我知道这有点深入和忙碌,但它让我保持井井有条。当我更改为 ZF2 时,我将不得不重新评估以实现命名空间。

于 2012-05-26T07:00:40.983 回答
0

你应该问的第一个问题是:

这个接口的所有者是谁?产品?

Product_Model_Interface_Name

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

为什么?

这样,您将很容易看到谁拥有用于创建它的模型。

但是如果你在谈论一个通用接口,那么你必须创建一个库

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

如果您使用通用接口,则需要在引导程序中配置自动加载

于 2012-05-25T13:10:12.743 回答