2013-04-02 98 views
0

在Zend Framework 2中,我們使用工廠來啓動類。對於我們使用的工廠,可以使用FactoryInterface,這使您可以使用ServiceManager。Zend框架反覆依賴

我們的問題只是反覆依賴。我們有以下

我們有PlaceRepositoryPlaceEntity

PlaceRepostory依賴於PlaceEntity,因此它知道它需要返回哪個實體。然而PlaceEntity也需要PlaceRepostory,所以它可以得到父母的地方。 (比如得到城市x的國家(城市和鄉村都是地方))。

這以永遠依賴的方式結束。

現在我們可以在實體中注入服務定位器,但是您失去了輕鬆測試的功能,並且看不到它依賴於哪個類。

那麼是否還有其他選項可用於這個問題,或者可以選擇這個問題,因此您仍然可以擁有依賴項,但它不會像循環一樣重複出現?

回答

1

如果依賴性是等級性的,則將其分解爲所有權和成員資格。 嘗試添加指向成員和所有者的對象屬性。 由於PlaceRepository擁有PlaceEntity對象,可以實現這樣的

instancePlaceRepository->members['instancePlaceEntityName'] = instancePlaceEntity; 

instancePlaceEntity->owner = instancePlaceRepository; 

這將對一切都井然有序。

你可以走下會員,爬上業主。

如果您有國家 - >城市 - >街道類型的依賴關係,所有內容都是placeEntity和一個placeRepository包含所有內容,則取消PlaceRepository的所有權,此時構建地點周圍的層次結構。國家 - >會員有城鎮和鄉鎮 - >會員有街道,建築物等