sum*_*eet 4 php laravel laravel-5
laravel 5中包含的新命令总线功能使我感到困惑。在控制器本身可以完成相同任务的同时,为什么以及何时应该使用命令?
命令
class PurchasePodcast extends Command implements SelfHandling {
protected $user, $podcast;
/**
* Create a new command instance.
*
* @return void
*/
public function __construct(User $user, Podcast $podcast)
{
$this->user = $user;
$this->podcast = $podcast;
}
/**
* Execute the command.
*
* @return void
*/
public function handle()
{
// Handle the logic to purchase the podcast...
event(new PodcastWasPurchased($this->user, $this->podcast));
}
}
Run Code Online (Sandbox Code Playgroud)
控制者
use Illuminate\Foundation\Bus\DispatchesCommands;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use PurchasePodcast;
abstract class Controller extends BaseController {
use DispatchesCommands, ValidatesRequests;
public function purchasePodcast($podcastId)
{
$this->dispatch(
new PurchasePodcast(Auth::user(), Podcast::findOrFail($podcastId))
);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我要使其复杂,而我却可以直接在控制器中而不是使用命令来完成它。
这个想法来自“命令模式”,其中一个对象用于封装信息以执行操作。
使用命令模式可以更轻松地组织要在软件中执行的操作。该命令作为一个对象,可在多个控制器中重复使用,因此可以使您干燥(不要重复自己)。
命令对象也与控制器分离,因此也更易于测试。
当然在编程中需要权衡。使用命令模式时,您将拥有更多的类(和文件)。因此,在需要时使用它。当您发现要执行的复杂操作并且您的控制器开始发胖时,您可能想看看这种模式。
| 归档时间: |
|
| 查看次数: |
781 次 |
| 最近记录: |