首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP / Zend程序体系结构和接口

PHP / Zend程序体系结构和接口
EN

Stack Overflow用户
提问于 2012-05-25 12:42:25
回答 2查看 162关注 0票数 0

嗨,伙计们,我在想接口应该放在哪里。

举个例子:

我有一个zend mvc多模块应用程序,我一直在工作,并希望清理它(这是一个真正的混乱)

模型对象包括但不限于:

代码语言:javascript
复制
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.

所以我的问题如下。

当涉及到接口时,以下哪一项是合适的?

代码语言:javascript
复制
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)

那么模型对象将是

代码语言:javascript
复制
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),但这意味着order需要一个在其“名称空间”之外的接口。(但是!相反,现在产品正在寻找“名称空间”之外的东西,以获得它必须适应的所有接口。)

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

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

在这个问题上,我的头脑会打转。我猜这更像是个人喜好吧?

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2012-05-25 21:10:13

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

谁是此接口的所有者?产品?

Product_Model_Interface_Name

/modules/product/model/interface/Name.php

为什么?

通过这种方式,您将很容易看到谁拥有用于其创建的模型。

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

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

如果你使用通用接口,你需要在你的bootstrap中配置自动加载

票数 0
EN

Stack Overflow用户

发布于 2012-05-26 15:00:41

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

代码语言:javascript
复制
/library
    /namespace
        /Application
            /Controller
                /Plugin
            /Interface
            /Model
                /Entity
                    /Abstract.php
                /Mapper
                    /Abstract.php
            /Resource
            /View
                /Helper

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10748551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档