作了幾年Windows環境下程序開發(大概200多個模塊,幾百萬行代碼),轉作PHP Web開發後,發現模塊級別的代碼重用實在是不如意啊,重用基本上都是代碼複製粘貼級別的,耦合度都過高,不利於代碼打包和重複發佈。好比文件上傳,包含了前端頁面部分的展示代碼和服務端處理上傳文件的代碼,須要處理以下幾個問題:前端
還有更多別的細節,單從這5個問題來看,已經不可避免地涉及到前端展示和後端數據庫了,所以用Yii擴展(Extension)的方式,沒法知足實際的要求(有不一樣意見的同窗能夠留言討論)。所以須要更加完備的載體去實現這些功能,天然考慮用模塊的形式去實現。具體方法以下:數據庫
目錄結構以下圖所示:後端
如此一來,這個模塊就在必定程度上,能夠獨立發佈了,其餘Yii用戶,只要把這個模塊放到modules目錄下,在配置文件里加上引用,就OK啦。安全
現實開發中,不會那麼一路順風,總會有更多的需求進來。好比,有attach模塊後,從安全方面考慮,須要肯定用戶是否已經登錄,以及用戶的一些操做權限是否能進行文件上傳操做,這個時候,勢必要依賴於用戶模塊,關於模塊依賴,Yii沒有提供官方的解決方案,讓你們自由發揮了。個人建議是,用聲明式的解決方式,好比在模塊文件裏,加說明。更增強制的辦法是加接口,強制調用的第三方實現。服務器
一般一個應用創建的時候,會有先後臺,一般作法是,整一個frontend目錄和一個backend目錄,區分前臺和後臺。可是用模塊化方式開發後,爲了保證模塊儘量的自描述,獨立性特徵,須要在模塊內部區分先後臺,建議的方式是分別創建兩個,即前臺FController和後臺基礎AController,其餘模塊內部的控制器,繼承對應的控制器,這樣就在模塊內部,實現了先後臺分離。簡單小結下先後臺分離所涉及的內容frontend
跨模塊調用不可避免會發生,好在Yii1.x 有個getModule方法,能夠把模塊初始化,並解決文件導入問題。美中不足的是,IDE的代碼提示沒法提示動態的模塊調用,不過能夠用PHPDoc方式解決,參加另外一篇博文。Yii2,又增長了一個getInstance()方法,此次完美解決了代碼自動提示問題,贊一個。模塊化
這樣一來,目錄結構會變成這樣:佈局
各個功能都各自盡可能在模塊內部解決問題。繼承