PHP / Zend程序架构和接口


PHP / Zend Program architecture and Interfaces

嗨,伙计们,我试图弄清楚应该在哪里保留接口。

一个例子 :

我有一个我一直在研究的 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可能是一个方法集产品(Model_Order_Item_Product_Interface $product)

里面Model_warehouse_Location_Position可能是一个方法集产品(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里面可能是方法集产品(Model_Product_Interface $product)但这意味着订单需要在其"命名空间"之外的接口。(但是!相反,现在产品正在寻找其"命名空间"之外,以获得它必须适应的所有接口)

我不是 100% 确定将这些界面放在哪里

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

我的脑海里可以循环往复这个话题。我猜这更多的是个人喜好?

附带说明一下,我还打算使用单例服务定位器返回专用于每个组的服务,并将交还工厂和数据访问对象(以及其他与服务相关的方法)

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

感谢您给我的任何建议。

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

谁是此界面的所有者?产品?

Product_Model_Interface_Name

/

模块/产品/型号/接口/名称.php

为什么?

这样,您将轻松查看谁拥有用于创建其模型的模型。

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

/

library/MyApplication/Models/Interface/Name.php

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

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

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

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