我创建了一个名为CMS的ZendFramework2小模块,以便在我的站点中编写简单的文章。下面这个模块使用Zend 和TableGateway类从数据库中获取数据。
我读过许多关于创建模块的策略的网站和书籍,我更喜欢使用以下文件结构的快捷方式:
.
├── Module.php
├── config
│ └── module.config.php
├── data
│ └── data.sql
├── src
│ └── Cms
│ ├── Controller
│ │ ├── IndexController.php
│ │ ├── PageAdminController.php
│ │ └── PageCategoryAdminController.php
│ ├── Form
│ │ ├── Element
│ │ │ ├── PageCategories.php
│ │ │ └── ParentPages.php
│ │ ├── PageCategoryFilter.php
│ │ ├── PageCategoryForm.php
│ │ ├── PageFilter.php
│ │ └── PageForm.php
│ ├── Hydrator
│ │ └── Strategy
│ │ └── DateTimeStrategy.php
│ ├── Model
│ │ ├── Page.php
│ │ ├── PageCategory.php
│ │ ├── PageCategoryTable.php
│ │ ├── PageTable.php
│ │ └── UrlRewrites.php
│ └── View
│ └── Helper
│ ├── Extract.php
│ └── Tags.php
└── view
└── cms
├── index
│ ├── index.phtml
│ ├── notfound.phtml
│ └── page.phtml
├── page-admin
│ ├── edit.phtml
│ └── index.phtml
├── page-category-admin
│ ├── edit.phtml
│ └── index.phtml
└── partial
└── tags.phtmlTableGateway方法
例如,这个文件结构允许我声明module.php中的Page和module.php类,并以这种方式调用ServiceLocator从数据库中读取和写入记录:
$pageTable = $this->getServiceLocator()->get('PageTable');在本例中,我可以使用这个类在PageTable类中编写CRUD方法。
注入服务方法
然后,我看到了这样一种服务方法,即CRUD操作位于调用TableGateway类的服务类中,并由工厂类将服务<代码>E 219注入E 120>ControllerE 221的__construct方法。
TableGateway >> Factory > Controller
为什么我要选择服务策略而不是简单的TableGateway?
发布于 2014-05-23 08:31:08
好吧,你的逻辑有点不对,实际上只是
Controller调用服务调用TableGateway
工厂只是一种正确注入依赖项的模式。
为何使用服务?
抽象化行为。一般来说,该服务是您的控制器获取数据的工具。然后,服务与数据源进行交互。数据源是什么,您的控制器并不关心--即使您的服务也不应该关心。服务应该只关心接口的实现。这样,每当你觉得你不再喜欢TableGateway,但你想去Doctrine2,你就不必改变你的服务。你不必更换你的控制器。您只需更改您的服务的依赖性。而不是注入TableGateway类,而是注入与数据提供程序依赖关系的接口匹配的Doctrine2类。
https://stackoverflow.com/questions/23823650
复制相似问题