Php 拉雷维尔国际奥委会-我这样做对吗?
我正试图通过使用Laravel服务提供商来学习国际奥委会的概念。到目前为止,我读到的内容是,您应该包含依赖于服务提供者中其他类的所有类创建逻辑。公平公正,但我想确保我做得对 我的应用程序将使用抽象Php 拉雷维尔国际奥委会-我这样做对吗?,php,laravel,inversion-of-control,service-provider,Php,Laravel,Inversion Of Control,Service Provider,我正试图通过使用Laravel服务提供商来学习国际奥委会的概念。到目前为止,我读到的内容是,您应该包含依赖于服务提供者中其他类的所有类创建逻辑。公平公正,但我想确保我做得对 我的应用程序将使用抽象Tracker类的子类,这取决于您向服务提供商提供的常量,它应该加载不同的类。走这条路对吗 服务供应商: class TrackerServiceProvider extends \Illuminate\Support\ServiceProvider { const TRACKER_API =
Tracker
类的子类,这取决于您向服务提供商提供的常量,它应该加载不同的类。走这条路对吗
服务供应商:
class TrackerServiceProvider extends \Illuminate\Support\ServiceProvider {
const TRACKER_API = 0;
const TRACKER_SITE = 1;
public function register() {
$this->app->bind('Tracker', function($app, $parameters) {
switch($parameters['method']) {
case static::TRACKER_API:
return new TrackerAPI(new cURL(), new Shipment($parameters['number']));
break;
case static::TRACKER_SITE:
return new TrackerSite(new cURL(), new Shipment($parameters['number']));
break;
default:
throw Exception('Unknown tracker method provided.');
break;
}
});
}
}
抽象跟踪器类(仅是基本类):
或者我应该在register
方法中创建两个不同的绑定,每个类一个?像这样:
class TrackerServiceProvider extends \Illuminate\Support\ServiceProvider {
public function register() {
$this->app->bind('TrackerAPI', function($app, $number) {
return new TrackerAPI(new cURL(), new Shipment($number));
});
$this->app->bind('TrackerSite', function($app, $parameters) {
return new TrackerSite(new cURL(), new Shipment($number));
});
}
}
我更喜欢在这里创建一个
工厂
,将其与服务提供商
分离。下面的代码只是一个演示,最好不要在下面的TrackerFactory
中使用静态方法
class TrackerFactory {
const TRACKER_API = 0;
const TRACKER_SITE = 1;
public static function make($parameters) {
switch($parameters['method']) {
case static::TRACKER_API:
return new TrackerAPI(new cURL(), new Shipment($parameters['number']));
break;
case static::TRACKER_SITE:
return new TrackerSite(new cURL(), new Shipment($parameters['number']));
break;
default:
throw Exception('Unknown tracker method provided.');
break;
}
}
}
那就把它捆起来
class TrackerServiceProvider extends \Illuminate\Support\ServiceProvider {
public function register() {
$this->app->bind('Tracker', function($app, $parameters) {
return TrackerFactory::make($parameters)
});
}
}
class TrackerServiceProvider extends \Illuminate\Support\ServiceProvider {
public function register() {
$this->app->bind('Tracker', function($app, $parameters) {
return TrackerFactory::make($parameters)
});
}
}