服务层如何在实现在CI框架中使用

  

服务层如何在实现在CI框架中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

大家知道CodeIgniter框架式MVC分层的,通常大家把业务逻辑写到控制器中,而模型只负责和数据库打交道。

但是随着业务越来越复杂,控制器越来越臃肿,举一个简单的例子,比如说用户下订的单,这必然会有一系列的操作:更新购物车,添加订单记录,会员添加积分等等,且下订单的过程可能在多种场景出现,如果这样的代码放控制器中则很臃肿难以复用,如果放模型会让持久层和业务层耦合。现在公司的项目就是,很多人将一些业务逻辑写到模型中去了,模型中又调其它的模型,也就是业务层和持久层相互耦合。这是极其不合理的,会让模型难以维护,且方法难以复用。

是不是可以考虑在控制器和模型中加一个业务服务层,由它来负责业务逻辑,封装好的调用接口可以被控制器复用。

这样各层的任务就明确了:
模型(DAO):数据持久层的工作,对数据库的操作都封装在这。
服务:业务逻辑层,负责业务模块的逻辑应用设计,控制器中就可以调用服务的接口实现业务逻辑处理,提高了通用的业务逻辑的复用性,设计到具体业务实现会调用模型的接口。
控制器:控制层,负责具体业务流程控制,这里调用服务层,将数据返回到视图
视图:负责前端页面展示,与控制器紧密联系。

基于上面描述,实现过程:
(1)让CI能够加载服务,服务目录放在应用程序下,因为CI系统没有服务,则在应用程序/核心下新建扩展MY_Service。php

 

(2)扩展CI_Loader实现,加载服务,在应用程序/核心下新建MY_Loader。php文件:

& lt; php ?   class  MY_Loader  extends  CI_Loader   {   ,,,/* *   *,才能List  of  loaded  sercices   ,*   *,才能@var 数组   *,才能@access 保护   ,*/,protected  _ci_services 美元;=,数组();/* *   *,才能List  of  paths 用load  sercices 从   ,*   *,才能@var 数组   *,才能@access 保护   ,*/,protected  _ci_service_paths 美元;,=,数组();   ,,,/* *   ,,,,*,构造函数   ,,,,*,   ,,,,*,Set 从而path 用,Service 文件   ,,,*/,,,public  function  __construct ()   ,,,{   ,,,,,,,父母:__construct ();   ,,,,,,,这个→美元_ci_service_paths =,数组(APPPATH);   ,,,}   ,,,/* *   ,,,,*,Service 加载程序   ,,,,*,   ,,,,*,却;能够function  lets  users  load 以及instantiate 类。   *,才能It  is  designed 用be  nbsp;得到a 用户# 39;s  app 控制器。   ,*   *,才能@param  string 从而name  of 从而类   *,才能@param  mixed 从而optional 参数   *,才能@param  string  an  optional  object 名字   *,才能@return 空白   ,,,*/,,,public  function 服务($ service =, & # 39; & # 39;,, params 美元;=,NULL,, object_name 美元;=,NULL)   ,,,{   ,,,,,,,如果(is_array(服务)美元)   ,,,,,,,{   ,,,,,,,,,,,foreach (service 美元;as  $类)   ,,,,,,,,,,,{   ,,,,,,,,,,,,,,,这个美元→服务(类美元,,params);   ,,,,,,,,,,,}   ,,,,,,,,,,,返回;   ,,,,,,,}   ,,,,,,,如果(service 美元;==,& # 39;& # 39;,或是收取($ this→_ci_services[服务]美元)),{   ,,,,,,,,,,,return 假;   ,,,,,,,}   ,,,,,,,如果(!,is_null (params美元),,,,,,is_array (params)美元),{   ,,,,,,,,,,,params 美元;=,空;   ,,,,,,,}   ,,,,,,,subdir 美元;=,& # 39;& # 39;;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

服务层如何在实现在CI框架中使用