Loading

你在平时开发中对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层。整体思路都是差不多地,总之,千言万语:无论这名字起的多五花八门,最终都是为解决良好地代码组织问题!

以上是从业这些年,个人的一些理解。

转: 老李秀

posted @ 2018-09-18 10:49  王召波  阅读(3024)  评论(0编辑  收藏  举报