【发布时间】:2014-08-02 01:06:54
【问题描述】:
我一直在努力重构我不久前编写的一些代码,以使其更简洁、更可测试。我可能会在这里分裂头发,但对于下面的场景,我想知道哪种方法更好以及为什么。
所以我有一个观察者来监视我的应用模型创建事件,然后执行一些初始化。在一种情况下,我可以直接调用我的初始化程序,而在另一种情况下,我可以在我的模型上调用 initialize 并传入一个 Initializer 对象。
观察者:AppObserver.php
class AppObserver {
private $appInitializer;
public function __construct(InitializerInterface $appInitializer){
$this->appInitializer = $appInitializer;
}
public function created($app) {
// option 1
$this->appInitializer->initialize($app);
// option 2
$app->initialize($this->appInitializer);
}
}
模型:App.php
class App {
...
// option 2
public function initialize(InitializerInterface $initializer){
$initializer->initialize($this);
}
...
}
初始化程序:AppInitializer.php
class AppInitializer implements InitializerInterface {
...
public function initialize($app){
$this->generateIdHash();
$this->generateSecretKey();
$this->setPlatformVersion();
}
...
}
我倾向于选项 2,因为它允许我做 Initializer 依赖项不做的其他事情。
感谢您提供的任何反馈或您的任何建议。
【问题讨论】:
标签: php oop laravel dependency-injection solid-principles