资讯专栏INFORMATION COLUMN

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

韩冰 / 1500人阅读

摘要:有什么作用层的作用就是把这些需要多个参与的复杂业务逻辑多带带封装出来,这些之间不再发生直接的依赖,而是在层内协同完成逻辑。层的第一个目的其实就是对层进行解耦。相关资料框架中,有必要再分离层么

序言

此前,我看过这样的一个提问“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 commonservice;

use Yii;
use apimodulesv1modelsSales;
use apimodulesv1chancemodelsChance;

/**
 * //下属的线索公共数据处理逻辑
 */
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 commonserviceCluesBranchService;

$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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31949.html

相关文章

  • 1、管家婆项目

    摘要:项目训练目标项目训练目标项目目标综合运用前面所学习的知识点熟练层层层之间的方法相互调用操作熟练操作数据库表完成增删改查了解公司项目开发的流程,充分的掌握项目需求分析设计与功能的代码实现。 01项目训练目标 * A: 项目训练目标 * a: 项目目标 * 综合运用前面所学习的知识点 * 熟练View层、Service层、Dao层之间的方法相互调用操...

    binaryTree 评论0 收藏0
  • web前端性能优化总结

    摘要:但是还是会阻塞事件,所以会可能在触发前或后执行,但是一定会在事件前触发。当监听到该图片元素进入可视窗口时,即将自定义属性中的地址存储到属性中,达到懒加载的效果。当代码执行,线程被冻结。所以的性能让变慢。 概括 涉及到的分类 网络层面 构建层面 浏览器渲染层面 服务端层面 涉及到的功能点 资源的合并与压缩 图片编解码原理和类型选择 浏览器渲染机制 懒加载预加载 浏览器存储 缓存机制...

    evin2016 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<