淺談laravel的msvc模式

在以前沒有 Service 時,如果要查詢一個 id 爲 1 切 status 爲 1 的數據,而且這段代碼需要重複用到,那麼很多人的第一想法是定義一個方法到 Model 裏面去。因爲在業務中,我們會遇到很多這種事情,然後隨着更新 Model 就會越來越大,大到難以維護,所以我們就需要把 Model 拆分。常規的拆分除了 Service 還有 Repository ,這兩種組合加上去。因爲在業務中,我們但部分時間都是放在查詢的。

Repository 應該做什麼?

Repository ,顧名思義是一個倉庫,原則上是對應的一個 Model ,但是也並不強制,用來專門做查詢,就像前面的業務,就完全可以封裝到 Repository 去。

Service 又應該來做什麼?

顧名思義, Service 即服務,就是用來處理一些複雜的場景和數據整合,比如用戶註冊、用戶登錄、用戶下單、處理三方回調等等這些都可以算作一個複雜的場景。還有數據整合,比如 Dashbroad ,這些地方,爲了代碼複用的最大化,其中的數據應該是由多個小的 Repository 來進行組成的。再有就是由一些 Service 的 Event 的調度。

Controller 應該來做什麼?

  • 表單數據驗證
  • 對 Service 的各種情況進行處理,理想情況下,Service 中出現的所有非理想結果都應該拋出異常,由 Controller 進行捕獲後處理給用戶。

Model 應該做些什麼?

在像 Laravel 這類框架中,Model 其實要做的有很多。比如:

  • 作用域(scope)
  • 關聯關係(relation)
  • 表屬性(property)
  • 模型事件(model event)
  • 訪問器修改器
  • 序列化

參考:  https://segmentfault.com/q/1010000010721956

          http://www.kancloud.cn:8080/curder/laravel/408485

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章