嗨,伙计们,我试图弄清楚应该在哪里保留接口。
一个例子 :
我有一个我一直在研究的 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 时,我将不得不重新评估以实现命名空间。