1
我目前的情況:避免與服務定位器平行繼承
A具有一個抽象類,Controller
,其具有由一個服務定位器,Locator
在運行時注入的依賴關係。服務定位器已正確實現 - 它不會在整個應用程序中傳遞,並且僅由作爲應用程序的根對象的Controller
消耗。
我遇到的問題是如何構建的服務定位器(S),當我從Controller
繼承 - 我不一定要(和寧願不)來擴展基礎服務定位器Locator
,但我需要複製父類的依賴關係。
下面是一些示例代碼解釋什麼是要去:
// Controller.php
namespace abstract;
abstract class Controller {
public function __construct($locator) {
$this->template_handler = $locator->getTemplateHandler();
$this->input_sanitizer = $locator->getInputSanitizer();
}
}
-
// Controller.php
class Controller extends abstract\Controller {
public function __construct($locator) {
$this->data_factory = $locator->getDataFactory();
parent::__construct($locator);
}
}
-
// Locator.php
namespace abstract;
class Locator {
public function getTemplateHandler() {
return 1234;
}
public function getInputSanitizer() {
return 1234;
}
}
所以我想問題就變成了 - 怎麼我定義我Locator
類?我是否擴展了abstract\Locator
(創建一個並行繼承樹),我是否實現了相同的方法而不擴展abstract\Locator
(這個複製代碼),還是我做了一些我沒有想到的不同的東西?
'命名空間抽象;'是無效的語法 – Vitamin 2012-02-23 21:00:12
這是非常真實的。我也忘記了我的要求,'Controller'除構造函數外沒有其他方法。感謝您提供有見地的提示。 – 2012-02-23 21:02:17