yii 框架簡析

date: 2017-11-21 10:50:00
title: yii 框架簡析

因為工作原因需要重拾 yii 框架, 而之前一直使用的 hyperframework -- 公司技術團隊內部開發的框架, 需要什么服務, 直接往框架上添加即可. hyperframework 底層是服務容器, 需要添加新的服務很簡單, 這個在我之前的 blog hyperframework WebClient 源碼解讀 / 用 yii 框架 10 分鐘開發 blog 系統? 都有提到, 不熟悉的同學可以移步一覽. 所以思路上需要做一點改變: yii 已經封裝好了很多常用服務, 開箱即用.

PS: 這篇博客的英文版標題是 get_yii.md, 紀念一下我在 github 上加入的第一個開源組織以及開源項目 iiYii/getyii. 一晃三年過去了, 在此對開源作者表達誠摯敬意!

之前也提到過, 這樣的重型框架之所以入門比較困難, 很大一部分原因是功能太多, 導致難以分清主次和記憶. 這里記憶不是死記硬背, 而是知識的內化, 不過知識的內化說起來更難以理解, 倒不如說是想要達到知識隨用隨取信手拈來的境界, 你起碼得記得吧. 當時也提到一些方法, 這篇 blog 會進行完善并實踐.

簡析 yiii 框架的方法(類似的重型框架都可以采用這個思路):

  • 生命周期
  • 核心架構 & 模塊劃分
  • 腦圖/筆記 等工具
  • 實踐, 比如開發 blog 系統

生命周期

通過生命周期來 解讀源碼/定位問題 是非常非常重要的手段. 鳥哥 在他的博客中, 無論是源碼分析, 還是問題解決, 多次實踐, 這里摘錄 思考能力何其重要.. 中的一段話:

沒有, 好吧, 如果說一定要有, 那就是:vim + grep + “大膽推論,小心驗證”, 我知道一個c寫的可執行文件, 是從main開始的, 我知道對于mod_php來說, 開始點必然在apache將控制權交給它的那一刻開始, 有了這些, 就可以使用vim徜徉在海一樣的代碼中, 而不會迷路. 有了這些, 不就足夠了么?

yii 框架的生命周期, 雖然在應用上會做如下分類:

  • web 應用: 一次 http 請求的生命周期, 抽象一點就是 request + response
  • console 應用: 一次腳本的執行過程.

但是其實是統一的, 都是對應程序的輸入與輸出(input/output), 只是在 http 請求這里, 使用 request/response 來表示, 而在后臺腳本這里, 使用 argument/option 表示輸入, 腳本中直接 echo/print 表示輸出

  • php cli life cycle: 仔細看這張圖, 在執行的過程中, 也有 request 的概念
php cli life cycle
  • 官方供圖 - yii request life cycle: 很明顯的 request / response
運行進制

核心架構 & 模塊劃分

  • 官方供圖: application structure
image

這張圖里, 最核心的其實是: 應用主體, 其他部分, 都是通過應用主體來協調調度, 甚至你可以認為, yii = application(container) + component(service)

我制作的 百度腦圖: get_yii, 帶上了標識表示我理解的重要性.

  • entry: 入口腳本, 這是一切的開端, 從這里開始可以對框架有一個「全景式」的張開
  • application(container): 框架的核心, 容器機制已經是現代化框架的代名詞了
  • component(service): 框架提供的功能(服務), 由 application 來協調調度, 所有可見的功能, 大家經常提的 MVC, 其實也屬于這里
  • extension(vendor): 擴展(依賴), 雖然需要和框架配合, 可能也需要改造成 component, 但是它的核心理念其實是 依賴管理, 從而 站在巨人的肩膀上
  • concept: 框架需要涵蓋的設計理念, 這部分的內容希望大家可以好好閱讀, 因為 可能你一直徜徉在業務的海洋, 卻沒有花時間思考技術本身

工具 & 實踐

熟悉我的同學可能都知道, 我比較喜歡用 思維導圖, 平時也喜歡 記筆記, 部分觀點在之前也提到過, 這里再贅述一下:

  • 關于記憶: 知識的內化是需要過程的, 這個過程可以簡單理解為 記憶, 很多時候, 其實 記著了, 也就漸漸掌握了. 所以有時候大牛會跟你說, 下去多看看就行了. 為什么, 因為多看看就是一個重復的過程, 一回生二回熟. 當然, 也可以用點文雅的詞 -- 潛移默化
  • 筆記: 好記性不如爛筆頭, github 的 gist 來記代碼片段, 各種筆記應用, 這個就不用多言了吧. 提醒一點, 注意清理, 不然最后都是雜草了
  • 思維導圖: 開始使用思維導圖的契機其實蠻簡單, 這玩意可以幫助記憶, 當時還特地買了一套書來看這個. 其實并沒有必要特地去研究這個, 我一般這樣的場景下使用 -- 一個事物太復雜, 我需要花時間來整理清楚它

當然還有一些其他的工具, 主要遵循 一圖勝千言 的理念, 比如流程圖, 時序圖, 這就看場景了, 不過使用頻率沒那么高.

關于實踐, 我們前任 CTO 的建議我會一直銘記:

多讀源碼

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,113評論 25 708
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,881評論 18 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,941評論 6 342
  • 一篇20歲時候寫的文章,如今忽忽十年過去,增刪一些句子,希望可以有所不同。——題記 眼眶里盈滿睡意,卻一再的蘇醒。...
    纖纖閱讀 867評論 0 2
  • Sometimes 不能在代碼里把任務網址寫死,需要動態傳參給 spider ,以適應任務需求 首先得定義一個 _...
    Traim閱讀 2,646評論 0 1