2013-02-28 78 views
0

我刚刚熟悉Zend Framework 2数据库理论,长时间使用版本1。当业务逻辑需要一个表对象将操作推迟到另一个表对象时,我试图辨别使用多个表的“正确”方式。Zend Framework 2 tableGateway模式工作流程与其他表格

在现有的网关类中实例化一个不同的表类似乎是一个冗长而费力的过程。如果我使用与服务管理器工厂相同的过程,例如

$yourData = $myData['thisPart']; 
$dbAdapter = $this->_myTableGateway->getAdapter(); 
$resultSetPrototype = new ResultSet(); 
$resultSetPrototype->setArrayObjectPrototype(new TestObject()); 
$tbl = new TestTable(new TableGateway('tbl_name', $dbAdapter, null, $resultSetPrototype)); 
$tbl->insertSomeData($yourData); 

...那么我想它会工作,但服务管理器不应该在表类中可用。我可以使用工厂定义注入它,但这似乎不是一个好主意。

所以我想我的问题是什么是一个类(代表一个表和使用这种模式)的一些最好的方式插入一些数据到另一个表使用不同的网关类。或者,这种方法是唯一/正确的方法?

回答

0

对于这个问题,最好的方法似乎是在每个需要与其他表网关类交互的模型中实现ServiceLocatorAwareInterface接口。然后,您可以定义自动传递对服务定位器的引用的setServiceLocator(ServiceLocatorInterface $ sl)方法。

+0

据我所知,这将是一种反模式,因为您的对象取决于可以在任何地方进行更改的服务定位器。 工厂和注入你的依赖关系可能会有更好的解决方案 – Chris 2013-05-13 19:56:59

+0

有趣。你能提供一个例子吗? – voncox 2013-05-14 20:43:12

+0

示例如下:https://github.com/ZF-Commons/ZfcUser/blob/master/src/ZfcUser/Authentication/Adapter/AdapterChainServiceFactory.php几乎所有使用factoryinterface的示例都是如此。从服务定位器中提取需求,并注入它们,以便始终将依赖关系设置为1位置。 – Chris 2013-06-30 18:54:59