ZF2 / PHP - 模型工厂

时间:2017-05-08 22:45:03

标签: php zend-framework2 factory-pattern

我只想问一下,我应该如何在ZF2中创建一个模型类实例?我使用ServiceManager / FormElementManager / etc中的工厂创建我的所有服务,表单等...以注入不同类的依赖关系,但我认为这不是创建模型实例的正确方法比如产品,不是吗?

我应该使用$product = new Product()创建吗?但是,如果Product确实存在依赖性呢?我不想在我需要的所有不同地方初始化依赖项。

感谢任何提示。

2 个答案:

答案 0 :(得分:0)

想想我。在开发您正在开发的应用程序时,我没有遵循任何标准规则。我确定!你现在遇到各种各样的问题。因为在构建该应用程序时我没有注意依赖注入,分散对象创建等。所以猜猜现在有多难!暗!黑暗!

  

构建软件/ Web应用程序的所有努力仅适用于   良好/标准设计。这确实使构建软件/ Web应用程序更快,并保持一切整洁。更多   一般来说,如果我们是开发人员/程序员,这适合我们。

现在在 ZF2

尽可能使一切都可以使用。按文件夹顺序排列,如下所示

src/ModuleName/Model
src/ModuleName/Service
src/ModuleName/Form

创建关闭工厂(用于将服务附加到ServiceManager),以使其可用于您的应用程序。你可以注入任何依赖。保持Module.php瘦,使module.config.php脂肪。

答案 1 :(得分:0)

管理域模型(实体/模型类)的关系不应该自己使用依赖注入来尝试。这将被视为重新发明轮子。

这是因为当我们谈论域模型时,我们实际上是在讨论应用程序中的数据。作为开发人员,您已经决定将数据建模为对象(即new Product();是一个表示应用程序中的产品数据的类)。通过这样做,你已经给出了我们在OOP中所喜爱的所有奇妙能力的数据。这很好,直到你发布它很快变得非常复杂,特别是在大型应用程序中。产品“模型”具有关系,与其他模型的关系等。大型应用程序最终可能需要在内存中管理这些类的多个实例及其关系

当您尝试将此数据保存到公共存储(关系数据库)时,您会遇到许多复杂问题。这个问题被创造为Object Relational Impedance Missmatch,并且实际上是一个技术问题,对于使用数据库后端的大多数OOP语言来说都是通用的。

非常流行的解决方案是使用对象关系映射器(ORM),例如Doctrine。这抽象了数据库访问,允许您使用“实体”编写代码,同时忽略了必须管理依赖关系的复杂性。

虽然非常强大,但引入ORM可能会导致其他问题。这就是我们拥有像MongoDB这样的对象数据库的原因,也可能是开箱即用,ZF2没有附带任何数据库抽象或“域层”的原因。这实际上取决于您对任何特定项目的需求。