Service層的是否必要性分析及案例

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

序言

此前,我看過這樣的一個提問“Yii2架構中,有必要再分離service層嗎?”,從別人的回答中,自己也收穫了答案,但我覺得還需要有個活生生的粟子,才具有更加清晰明了和強有力的說服力。如對我的實戰經曆感興趣的繼續往下看,喜歡的還可以點擊推薦和收藏。在舉粟子前,我先講講service是什嗎?有什麼作用吧?免得還有人糊塗。
1、service是什嗎?
在面向OO的系統裡,service就是biz manager,在面向過程的系統裡service就是TS指令碼。
2、service有什麼作用?
service層的作用就是把這些需要多個model參與的複雜商務邏輯單獨封裝出來,這些model之間不再發生直接的依賴,而是在service層內協同完成邏輯。service層的第一個目的其實就是對model層進行解耦。

需求分析

1、在Yii2架構中建立service層,專門處理公用且複雜的商務邏輯。

1、在common下建立個service層。

2、部分公用資料處理邏輯(主要的資料處理都寫在這裡)。

程式碼分析

1、在commonservice下寫個CluesBranchService.php檔案,CluesBranchService類繼承本模組主要的models類Chance。凡是關於Chance的公用商務邏輯都往這個檔案裡寫。

namespace common\service;use Yii;use api\modules\v1\models\Sales;use api\modules\v1\chance\models\Chance;/** * //下屬的線索公用資料處理邏輯 */class CluesBranchService extends Chance{       //下屬的線索列表    public static function getIndex()    {            $SalesModel = new Sales();         $uids = $SalesModel->sevenChild(Yii::$app->user->id);        if(count($uids)){            $query = Chance::find()->where(['in','owner_id',$uids]);        }else{            $query = Chance::find()->where(['owner_id'=>'-1']);        }       return $query;    }}

2、Controllers裡調用。

use common\service\CluesBranchService;$query = CluesBranchService::getIndex();

注釋:這裡返回的是$query,而不是查詢的結果,用過Yii2的都知道列表實現分頁用的是ActiveDataProvider,不需要查出結果,為了統一起來所以這裡直接返回$query。如有特殊需要加where、andWhere或者擷取資料結果的可以這樣$query->where(['條件']);$query->all()。

分析總結

以上是一個商務邏輯比較簡單的service層的實現方式,看到這裡可能還有人疑惑,到底應不應該分離service層?
簡單粗暴的總結來說,如果你的某個商務邏輯,需要用到多個model,就放到service層裡面去,如果只是這個model自己的事,跟其它的model沒有任何關係,放到model裡面就好。
如果你的系統本來就很小,商務邏輯也超級簡單,也不存在長期演化迭代的需求,隨你怎麼高興怎麼寫都行。

相關資料

Yii2架構中,有必要再分離service層嗎?:https://segmentfault.com/q/1010000003849810

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.