Yii2 Day 4: 模塊化開發

困境

作了幾年Windows環境下程序開發(大概200多個模塊,幾百萬行代碼),轉作PHP Web開發後,發現模塊級別的代碼重用實在是不如意啊,重用基本上都是代碼複製粘貼級別的,耦合度都過高,不利於代碼打包和重複發佈。好比文件上傳,包含了前端頁面部分的展示代碼和服務端處理上傳文件的代碼,須要處理以下幾個問題:前端

  1. input控件的名稱,由於服務端須要這個來獲取$_FILES中的信息
  2. 文件若是是圖像,須要判斷是不是真正的圖像,是否進行縮放處理,加水印等操做
  3. 文件存儲位置
  4. 多文件上傳的時候,服務端處理信息的返回,好比某一個文件出現異常
  5. 文件信息的存儲,上傳到服務器的文件,要在數據庫中記錄下吧,日期,路徑,什麼的,好管理。

還有更多別的細節,單從這5個問題來看,已經不可避免地涉及到前端展示和後端數據庫了,所以用Yii擴展(Extension)的方式,沒法知足實際的要求(有不一樣意見的同窗能夠留言討論)。所以須要更加完備的載體去實現這些功能,天然考慮用模塊的形式去實現。具體方法以下:數據庫

可行方案

  1. 創建一個attach模塊,用以處理全部的業務
  2. 前端展示,用widget包裝,放在attach模塊內部,建一個widgets目錄
  3. 處理上傳文件,用action實現
  4. 對圖像的處理,可能會用到第三方類庫,在attach模塊裏,建一個vendor目錄,存放第三方類庫
  5. 數據庫表初始化代碼,用於建立或生成相應的文件上傳記錄表

目錄結構以下圖所示:後端

目錄結構

如此一來,這個模塊就在必定程度上,能夠獨立發佈了,其餘Yii用戶,只要把這個模塊放到modules目錄下,在配置文件里加上引用,就OK啦。安全

模塊依賴

現實開發中,不會那麼一路順風,總會有更多的需求進來。好比,有attach模塊後,從安全方面考慮,須要肯定用戶是否已經登錄,以及用戶的一些操做權限是否能進行文件上傳操做,這個時候,勢必要依賴於用戶模塊,關於模塊依賴,Yii沒有提供官方的解決方案,讓你們自由發揮了。個人建議是,用聲明式的解決方式,好比在模塊文件裏,加說明。更增強制的辦法是加接口,強制調用的第三方實現。服務器

先後臺分開

一般一個應用創建的時候,會有先後臺,一般作法是,整一個frontend目錄和一個backend目錄,區分前臺和後臺。可是用模塊化方式開發後,爲了保證模塊儘量的自描述,獨立性特徵,須要在模塊內部區分先後臺,建議的方式是分別創建兩個,即前臺FController和後臺基礎AController,其餘模塊內部的控制器,繼承對應的控制器,這樣就在模塊內部,實現了先後臺分離。簡單小結下先後臺分離所涉及的內容frontend

  1. 用戶分離,前臺控制器驗證的是前臺用戶,後臺控制器驗證的是後臺用戶信息
  2. 佈局分離,先後檯布局應該差異很大,因此在FController和AController兩個基類裏,須要分別設置不一樣的layout,實現佈局分離
  3. ...(還沒想到更多,歡迎補充)

跨模塊調用

跨模塊調用不可避免會發生,好在Yii1.x 有個getModule方法,能夠把模塊初始化,並解決文件導入問題。美中不足的是,IDE的代碼提示沒法提示動態的模塊調用,不過能夠用PHPDoc方式解決,參加另外一篇博文。Yii2,又增長了一個getInstance()方法,此次完美解決了代碼自動提示問題,贊一個。模塊化

目錄結構

這樣一來,目錄結構會變成這樣:佈局

目錄結構

各個功能都各自盡可能在模塊內部解決問題。繼承

相關文章
相關標籤/搜索