如何讓CI框架支援service層

2022-02-09 01:58:32 字數 2171 閱讀 9047

本文主要介紹了在controller和model中加乙個業務層service,由它來負責業務邏輯,封裝好的呼叫介面可以被controller復用,提高了通用的業務邏輯的復用性,設計到具體業務實現會呼叫model的介面。

大家知道codeigniter框架式mvc分層的,通常大家把業務邏輯寫到controller中,而model只負責和資料庫打交道。

但是隨著業務越來越複雜,controller越來越臃腫,舉乙個簡單的例子,比如說使用者下訂單,這必然會有一系列的操作:更新購物車、新增訂單記錄、會員新增積分等等,且下訂單的過程可能在多種場景出現,如果這樣的**放controller中則很臃腫難以復用,如果放model會讓持久層和業務層耦合。現在公司的專案就是,很多人將一些業務邏輯寫到model中去了,model中又調其它model,也就是業務層和持久層相互耦合。這是極其不合理的,會讓model難以維護,且方法難以復用。

是不是可以考慮在controller和model中加乙個業務層service,由它來負責業務邏輯,封裝好的呼叫介面可以被controller復用。

這樣各層的任務就明確了:

model(dao):資料持久層的工作,對資料庫的操作都封裝在這。

service :

業務邏輯層,負責業務模組的邏輯應用設計,controller中就可以呼叫service的介面實現業務邏輯處理,提高了通用的業務邏輯的復用性,設計到具體業務實現會呼叫model的介面。

controller

:控制層,負責具體業務流程控制,這裡呼叫service層,將資料返回到檢視

view : 負責前端頁面展示,與controller緊密聯絡。

複製**

**如下:

<?php

class my_service

function __get($key)

}複製**

**如下:

<?php

class my_loader extends

ci_loader

return;

}if($service == '' or isset($this->_ci_services[$service]))

if(! is_null($params) && !

is_array($params))

$subdir = '';

// is the service in a sub-folder? if so, parse out the

filename and path.

if (($last_slash = strrpos($service, '/')) !==

false)

foreach($this->_ci_service_paths as $path)

include_once($filepath);

$service =

strtolower($service);

if (empty($object_name))

$service = ucfirst($service);

$ci =

&get_instance();

if($params !== null)

else

$this->_ci_services = $object_name;

return;}}

}(3)簡單例子實現:

控制器中呼叫service :

複製**

**如下:

<?php

class user extends

ci_controller

public function

login()

}service中呼叫model :

複製**

**如下:

<?php

class user_service extends

my_service

public function login($name, $password)

}model中你只跟db打交道:

複製**

**如下:

<?php

class user_model extends

ci_model

public function get_user_by_where($name,

$password)

}基本實現思路就是這樣的。

「讓CI框架支援service層」的那些問題

自己寫了個demo,用php的ci框架,好長時間沒搞了,都忘記了,想新增service層的時候,發現現有網上的code有點問題。其實都不是大問題,注意一下就好了 抄了部分 連線如下 搜尋的結果 都或多或少的不完成 然後整合上述 解決部分問題 注意問題,如下 1,配置 config subclass ...

如何讓Sphinx doc支援MathJax公式

實現這個目的難嗎?一點都不難,但是sphinx是以擴充套件的形式來支援mathjax數學公式渲染的,並且坦白地說,它支援的一點都不好。下面是我自己摸索的操作步驟,花了不少時間,因為中英文 上關於sphinx doc支援mathjax的tutorial基本沒有。1.直接配置外掛程式即可 按照參考資料2...

CI框架支援 GET的兩種實現方法

首先ci框架在2.0以後就支援get了,所以使用毫無壓力!1.使用get傳遞引數的方法 ci會自動將超過uri的兩部分作為引數傳給方法。可以去看手冊 ci框架中文手冊 如下 localhost index.php jb51 func fwsqfdhoa b 那麼控制器中的方法php 如下 www.c...