3

为了澄清我的疑问,我有这种情况:

我有一个销售汽车和房屋的应用程序(只是一个例子!),所以我创建了一个显示所有汽车的模块,称为Cars,以及一个显示所有房屋的模块,称为Houses

我有一个管理器模块,它应该有一个用于汽车和房屋的 CRUD 系统。

我应该把我的汽车和房屋模型放在哪里?我应该创建一个模块来放置我的模型,比如Main模块?或者我应该把我的模型放在Cars and Houses模块中,然后在Manager模块中访问它们?

假设我使用selectinsertdeleteCarModel方法创建了一个。如果我将此模型放入模块中,我可能会遇到安全问题,因为现在可以访问插入删除方法......CarsCars

另一方面,我可以只使用selectCarModel方法创建一个内部Cars模块,然后在模块中再次创建一个插入删除模块,但这会使代码的维护变得非常困难......CarModelManager

解决此问题的最佳方法是什么?

4

1 回答 1

15

因此,要从高层次回答您的问题,您可以通过两种方式在您给出的上下文中分解模块:

  • 一体化模块(将 admin/CRUD 与提供实体和前端内容的实际模块相结合)。我的一位开发人员在此模块中采用了这种方法:https ://github.com/speckcommerce/SpeckCatalog
  • 单独的模块。例如,ZfcUser不提供用户管理,但ZfcUserAdmin利用 ZfcUser 中的实体/映射器并提供额外的用户管理/管理功能。

这两种方法都没有错误或正确。这实际上仅取决于您的偏好以及您希望如何分解应用程序的功能。例如,您是否曾经想构建一个站点,在没有管理/CRUD 系统的情况下使用 Houses 或 Car 模块?

在更技术的层面上,有几种方法可以使用 Zend\Db 处理“模型”或“实体”。两种常见的模式是TableGateway模式和Data Mapper模式。

  • 表网关:我写过关于这个的博客:http ://blog.evan.pro/zf2-tablegateway-hydration

  • 数据映射器:这是我的首选解决方案。我还没有写过关于这个的博客,但是你可以在ZfcUser中找到一个使用示例。此外,基础数据映射器不像 Table Gatway 那样内置在 ZF2 中,但它是一个更加灵活的解决方案。查看ZfcBase提供的AbstractDbMapper

我将借此机会从Rob Allen和我在 PHPNW12 上提供的 ZF2 教程中取笑几张幻灯片,几周后还将在 ZendCon 上再次提供

表网关 http://evan.pro/caps/2ddbaf.png 表网关选择 http://evan.pro/caps/0904b8.png AbstractDbMapper http://evan.pro/caps/a31480.png 映射器选择 http:// /evan.pro/caps/a2a04f.png 摘要 http://evan.pro/caps/3ec9e6.png

于 2012-10-15T06:43:20.887 回答