2013-02-28 70 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