首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZF2: Zend,TableGateway,服务策略

ZF2: Zend,TableGateway,服务策略
EN

Stack Overflow用户
提问于 2014-05-23 07:42:18
回答 1查看 211关注 0票数 0

我创建了一个名为CMS的ZendFramework2小模块,以便在我的站点中编写简单的文章。下面这个模块使用Zend TableGateway类从数据库中获取数据。

我读过许多关于创建模块的策略的网站和书籍,我更喜欢使用以下文件结构的快捷方式:

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

TableGateway方法

例如,这个文件结构允许我声明module.php中的Page和module.php类,并以这种方式调用ServiceLocator从数据库中读取和写入记录:

代码语言:javascript
复制
$pageTable = $this->getServiceLocator()->get('PageTable');

在本例中,我可以使用这个类在PageTable类中编写CRUD方法。

注入服务方法

然后,我看到了这样一种服务方法,即CRUD操作位于调用TableGateway类服务类中,并由工厂类服务<代码>E 219注入E 120>ControllerE 221的__construct方法。

TableGateway >> Factory > Controller

为什么我要选择服务策略而不是简单的TableGateway?

EN

回答 1

Stack Overflow用户

发布于 2014-05-23 08:31:08

好吧,你的逻辑有点不对,实际上只是

Controller调用服务调用TableGateway

工厂只是一种正确注入依赖项的模式。

为何使用服务?

抽象化行为。一般来说,该服务是您的控制器获取数据的工具。然后,服务与数据源进行交互。数据源是什么,您的控制器并不关心--即使您的服务也不应该关心。服务应该只关心接口的实现。这样,每当你觉得你不再喜欢TableGateway,但你想去Doctrine2,你就不必改变你的服务。你不必更换你的控制器。您只需更改您的服务的依赖性。而不是注入TableGateway类,而是注入与数据提供程序依赖关系的接口匹配的Doctrine2类。

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

https://stackoverflow.com/questions/23823650

复制
相关文章

相似问题

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