你在平時開發中對MVC有什么理解?Logic或者Service層呢?


這玩意實際上沒有標准答案了,每個人和每個人理解方式都不一樣,但是最終目的都是為解決問題而生的。

一般說來,大家對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層。整體思路都是差不多地,總之,千言萬語:無論這名字起的多五花八門,最終都是為解決良好地代碼組織問題!

以上是從業這些年,個人的一些理解。

 

轉:https://t.ti-node.com/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM