這玩意實際上沒有標准答案了,每個人和每個人理解方式都不一樣,但是最終目的都是為解決問題而生的。
一般說來,大家對MVC都是比較熟悉的,至於Logic層可能略微陌生或者見過但沒用過。先說MVC是什么意思,老生常談。
mcv 是模型(model)-視圖(view)-控制器(controller)的縮寫的英文縮寫。
其中,Model叫做數據層,用於做數據庫的操作,主要是增刪查改,這一層我建議將功能做的足夠足夠細致原子。
其中,Controller控制器層是處理用戶與服務器交互的。是和用戶瀏覽器或者客戶端打交道的第一層!這里可以接受數據,將數據進行初步處理,往往如參數類型校驗放在這一層。然后將組裝好的數據調用Model來進行查詢,等一系列調用,最終拿到數據,渲染給View。
其中,View為視圖層,說的直白一點兒就是html網頁。不過這倆年前后端分離比較常見,導致V層直接被抽出去扔給前端了。早些年間,都是混雜開發。
那么,Logic或者Service層是來做什么的?前面我說了,將Model中的功能拆分的要足夠細致,然后在Controller中連續調用多個不同的方法,最終組合出數據來,比如下面這個Model:
<?php class UserModel { // 獲取基本信息 public function getUserById ( $id ) { $sql = "select * from user where id=".$id; $user = $mysql->query( $sql ); return $user; } // 獲取頭像 public function getAvatar ( $id ) { return $avatar; } } 那么,在controller里如果要獲取一個完整用戶信息,就需要調用兩次: $user = $userModel->getUserById( $id ); $avatar = $userModel->getAvatar( $id ); $user['avatar'] = $avatar;
為什么要分開寫呢而不是一次性在getUserById中直接處理頭像呢?因為並不是所有場合都需要頭像,同時,也並不是所有需要頭像的地方需要基本信息。比如某些場合下,只需要用戶id,昵稱,創建時間,這種情況下是沒有必要返回頭像的。
但是,這樣分開寫,也帶來了一定壞處,就是假如有好幾個method中都不僅需要基本信息,也需要頭像,這會兒重復的邏輯很多,需要反復寫很多
$user = $userModel->getUserById( $id ); $avatar = $userModel->getAvatar( $id ); $user['avatar'] = $avatar;
顯得復用性非常差勁,於是Logic層就誕生了,將你常用的可以復用的業務邏輯抽象成一個Logic,Controller可以直接調用Logic。對於簡單的業務,可以直接調用Model,如果有復用必要,整理到Logic中。
當然,有些框架會分的更為細致,Service層和DAO層。整體思路都是差不多地,總之,千言萬語:無論這名字起的多五花八門,最終都是為解決良好地代碼組織問題!
以上是從業這些年,個人的一些理解。