W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
項目中的大部分業(yè)務(wù)邏輯,都應(yīng)該封裝到 Service 層。這不僅能更好地組織代碼,還方便單元測試。
Model 的操作,涉及到業(yè)務(wù)邏輯的,絕不放置于控制器方法或模型文件中。
控制器方法只處理請求邏輯。模型只處理模型定義,以及數(shù)據(jù)關(guān)聯(lián)邏輯。
業(yè)務(wù)邏輯必須封裝到對應(yīng)的 ModelService 類中。
例如 LearnKu.com 的 Reply 模型,用戶發(fā)布 Reply 時需要的邏輯,如發(fā)送通知給話題的作者,或者增加話題的評論數(shù)等操作,放置于 ReplyService 類的 create 方法。
必須參照 Laravel Model 的方法來命名,如:
$reply_service->create();
$reply_service->all();
$reply_service->update();
$reply_service->delete();
其他類型的類,都應(yīng)該使用 Service 來封裝,例如說:
請求第三方接口的類(SendCloudService)
圖片處理的工具類(ImageService)
包含業(yè)務(wù)邏輯的類(對 Elasticsearch 封裝的 SearchService )
所有的 Service 類都必須存放于 app/Services
目錄中(注意是復(fù)數(shù))。
應(yīng)該避免直接將 Service 類放置于 app/Services
目錄下,應(yīng)該考慮通過業(yè)務(wù)邏輯,將其歸類于子目錄中。如:
Auth —— 存放登錄、授權(quán)相關(guān)的 Service;
Payment —— 存放支付相關(guān)的 Service;
Book —— 存放課程相關(guān)的 Service.
必須 做到 Service 類無狀態(tài)。
無狀態(tài)意味著是無論在控制器方法、命令行、測試代碼中,皆可調(diào)用。
? 錯誤的例子:
// CommentService
public function create($content)
{
return Comment::create([
'content' => $content,
'user_id' => Auth::user()->id
]);
}
// PostService
public function update(Request $request)
{
return $this->comments()->create([
'content' => $request->get('content'),
'category_id' => $request->category_id
'user_id' => Auth::user()->id
]);
}
?正確的例子
// CommentService
public function create($content, $user)
{
return Comment::create([
'content' => $content,
'user_id' => $user->id
]);
}
// PostService
public function create($content, $category_id, $user)
{
return Post::create([
'content' => $content,
'category_id' => $category_id,
'user_id' => $user->id
]);
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: