91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

CodeIgniter控制器中業務邏輯的示例分析

發布時間:2021-09-16 15:20:06 來源:億速云 閱讀:124 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關CodeIgniter控制器中業務邏輯的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

先說下對CI中幾個文件夾的理解

helpers、libraries: 存放一系列輔助函數、輔助類,用來輔助控制器、業務邏輯實現功能。他們中的方法應當盡量避免與CI依賴,依賴越緊越難以復用。以郵件發送為例,發送郵件時很多參數是不變的,如編碼、協議、端口等,我們可能會在config下進行配置這些參數,然后library封裝一個郵件發送的類,并在其中獲取CI實例后讀取這些參數。此時就出現了與CI實例的依賴,該類就只能在CI框架中使用,其他系統要用到,就只能重寫了,沒達到復用的目的。如果發送的類只是接收參數,并封裝發送方法呢?所以說,盡可能的讓helpers、libraries變的簡單,職責變得單一。

controllers: 控制器目錄。控制器主要用來接管程序,起到連接的作用。通常情況下,我們會把業務邏輯寫在action中。但隨著業務變得復雜,action代碼將越來越臃腫,難以維護。

models: 模型目錄。CI的模型的主要職責就是和數據庫打交道,獲取數據。很多時候也會把業務邏輯放在模型中,但業務邏輯與模型實際上是兩種東西了。模型只是獲取數據,業務邏輯可能是把這些數據根據業務需要進行組合,組合方式可能有很多種,放在模型中會讓模型難以維護且不利于復用。說個碰到的例子,對數據按一定條件做緩存,獲取數據和緩存結果兩個流程寫在同一個方法中,但同樣的數據需要做另一種形式的緩存時發現,獲取數據的方法就沒法重用了。

third_party:第三方類庫目錄。拿到一個類庫后不要直接使用, 可以在library中進行一次封裝,讓其更適應于系統,其他人使用起來難度也會降低。

可以發現,每個文件夾都有自己的職責,每個模塊都有自己的家,都有自己的職能。那業務邏輯該怎么辦?

既然這樣, 我們也應該給業務邏輯安個家,建立一個唯一的目錄用來存放業務邏輯,暫且命名為service。控制器主要負責接收參數并調用service,service來調用模型,各層各盡其責。

下面看看怎么實現:

我們可以重寫MY_Load,增加service方法,直接通過

$this->load->service('user_service');

來調用。
但業務邏輯很多都需要獲取CI實例,這里可以參考模型的方法,core建立一個MY_Service,其他service均繼承該類,這樣子service里用法就跟控制器里一樣了。

class MY_Service
{
  public function __construct()
  {
    log_message('debug', "Service Class Initialized");
  }
  function __get($key)
  {
    $CI = & get_instance();
    return $CI->$key;
  }
}

其實主要思路還是需要有一層用來處理業務邏輯,java中都有這一層。隨著對CI的不斷熟悉,發覺這里需要這一層,達到解放控制器和模型的目的。和這種類似的做法還有很多,如果系統中有很多地方需要用到web service 或者說cache之類的,其實也可以按照上面的思路單獨放在一個文件夾中處理,方便管理。

感謝各位的閱讀!關于“CodeIgniter控制器中業務邏輯的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

峨眉山市| 七台河市| 万全县| 东乡| 会昌县| 潮安县| 林芝县| 渭南市| 乌苏市| 泸西县| 石门县| 南通市| 资讯| 丰城市| 涞源县| 宾川县| 威信县| 会昌县| 巴塘县| 建瓯市| 吴忠市| 南召县| 门头沟区| 孝感市| 湄潭县| 屏东县| 上饶县| 扶绥县| 岑溪市| 思南县| 丹棱县| 会宁县| 辽源市| 塔河县| 武乡县| 巴林右旗| 临沂市| 黄浦区| 鄂尔多斯市| 北碚区| 岳阳市|