yii 框架簡(jiǎn)析

date: 2017-11-21 10:50:00
title: yii 框架簡(jiǎn)析

因?yàn)楣ぷ髟蛐枰厥?yii 框架, 而之前一直使用的 hyperframework -- 公司技術(shù)團(tuán)隊(duì)內(nèi)部開發(fā)的框架, 需要什么服務(wù), 直接往框架上添加即可. hyperframework 底層是服務(wù)容器, 需要添加新的服務(wù)很簡(jiǎn)單, 這個(gè)在我之前的 blog hyperframework WebClient 源碼解讀 / 用 yii 框架 10 分鐘開發(fā) blog 系統(tǒng)? 都有提到, 不熟悉的同學(xué)可以移步一覽. 所以思路上需要做一點(diǎn)改變: yii 已經(jīng)封裝好了很多常用服務(wù), 開箱即用.

PS: 這篇博客的英文版標(biāo)題是 get_yii.md, 紀(jì)念一下我在 github 上加入的第一個(gè)開源組織以及開源項(xiàng)目 iiYii/getyii. 一晃三年過(guò)去了, 在此對(duì)開源作者表達(dá)誠(chéng)摯敬意!

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

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

  • 生命周期
  • 核心架構(gòu) & 模塊劃分
  • 腦圖/筆記 等工具
  • 實(shí)踐, 比如開發(fā) blog 系統(tǒng)

生命周期

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

沒(méi)有, 好吧, 如果說(shuō)一定要有, 那就是:vim + grep + “大膽推論,小心驗(yàn)證”, 我知道一個(gè)c寫的可執(zhí)行文件, 是從main開始的, 我知道對(duì)于mod_php來(lái)說(shuō), 開始點(diǎn)必然在apache將控制權(quán)交給它的那一刻開始, 有了這些, 就可以使用vim徜徉在海一樣的代碼中, 而不會(huì)迷路. 有了這些, 不就足夠了么?

yii 框架的生命周期, 雖然在應(yīng)用上會(huì)做如下分類:

  • web 應(yīng)用: 一次 http 請(qǐng)求的生命周期, 抽象一點(diǎn)就是 request + response
  • console 應(yīng)用: 一次腳本的執(zhí)行過(guò)程.

但是其實(shí)是統(tǒng)一的, 都是對(duì)應(yīng)程序的輸入與輸出(input/output), 只是在 http 請(qǐng)求這里, 使用 request/response 來(lái)表示, 而在后臺(tái)腳本這里, 使用 argument/option 表示輸入, 腳本中直接 echo/print 表示輸出

  • php cli life cycle: 仔細(xì)看這張圖, 在執(zhí)行的過(guò)程中, 也有 request 的概念
php cli life cycle
  • 官方供圖 - yii request life cycle: 很明顯的 request / response
運(yùn)行進(jìn)制

核心架構(gòu) & 模塊劃分

  • 官方供圖: application structure
image

這張圖里, 最核心的其實(shí)是: 應(yīng)用主體, 其他部分, 都是通過(guò)應(yīng)用主體來(lái)協(xié)調(diào)調(diào)度, 甚至你可以認(rèn)為, yii = application(container) + component(service)

我制作的 百度腦圖: get_yii, 帶上了標(biāo)識(shí)表示我理解的重要性.

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

工具 & 實(shí)踐

熟悉我的同學(xué)可能都知道, 我比較喜歡用 思維導(dǎo)圖, 平時(shí)也喜歡 記筆記, 部分觀點(diǎn)在之前也提到過(guò), 這里再贅述一下:

  • 關(guān)于記憶: 知識(shí)的內(nèi)化是需要過(guò)程的, 這個(gè)過(guò)程可以簡(jiǎn)單理解為 記憶, 很多時(shí)候, 其實(shí) 記著了, 也就漸漸掌握了. 所以有時(shí)候大牛會(huì)跟你說(shuō), 下去多看看就行了. 為什么, 因?yàn)槎嗫纯淳褪且粋€(gè)重復(fù)的過(guò)程, 一回生二回熟. 當(dāng)然, 也可以用點(diǎn)文雅的詞 -- 潛移默化
  • 筆記: 好記性不如爛筆頭, github 的 gist 來(lái)記代碼片段, 各種筆記應(yīng)用, 這個(gè)就不用多言了吧. 提醒一點(diǎn), 注意清理, 不然最后都是雜草了
  • 思維導(dǎo)圖: 開始使用思維導(dǎo)圖的契機(jī)其實(shí)蠻簡(jiǎn)單, 這玩意可以幫助記憶, 當(dāng)時(shí)還特地買了一套書來(lái)看這個(gè). 其實(shí)并沒(méi)有必要特地去研究這個(gè), 我一般這樣的場(chǎng)景下使用 -- 一個(gè)事物太復(fù)雜, 我需要花時(shí)間來(lái)整理清楚它

當(dāng)然還有一些其他的工具, 主要遵循 一圖勝千言 的理念, 比如流程圖, 時(shí)序圖, 這就看場(chǎng)景了, 不過(guò)使用頻率沒(méi)那么高.

關(guān)于實(shí)踐, 我們前任 CTO 的建議我會(huì)一直銘記:

多讀源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盟萨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子广凸,更是在濱河造成了極大的恐慌花竞,老刑警劉巖券腔,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異伶棒,居然都是意外死亡钩述,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門宛裕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瑟啃,“玉大人,你說(shuō)我怎么就攤上這事揩尸∮加欤” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵岩榆,是天一觀的道長(zhǎng)错负。 經(jīng)常有香客問(wèn)我,道長(zhǎng)勇边,這世上最難降的妖魔是什么犹撒? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮粒褒,結(jié)果婚禮上识颊,老公的妹妹穿的比我還像新娘。我一直安慰自己奕坟,他們只是感情好祥款,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布清笨。 她就那樣靜靜地躺著,像睡著了一般刃跛。 火紅的嫁衣襯著肌膚如雪函筋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天奠伪,我揣著相機(jī)與錄音跌帐,去河邊找鬼。 笑死绊率,一個(gè)胖子當(dāng)著我的面吹牛谨敛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滤否,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼脸狸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了藐俺?” 一聲冷哼從身側(cè)響起炊甲,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎欲芹,沒(méi)想到半個(gè)月后卿啡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菱父,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年颈娜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浙宜。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡官辽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出粟瞬,到底是詐尸還是另有隱情同仆,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布裙品,位于F島的核電站俗批,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏清酥。R本人自食惡果不足惜扶镀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望焰轻。 院中可真熱鬧臭觉,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至什乙,卻和暖如春挽封,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背臣镣。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工辅愿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忆某。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓点待,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親弃舒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子癞埠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,167評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)聋呢,斷路器苗踪,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,822評(píng)論 6 342
  • 一篇20歲時(shí)候?qū)懙奈恼拢缃窈龊鍪赀^(guò)去削锰,增刪一些句子通铲,希望可以有所不同∥箍撸——題記 眼眶里盈滿睡意测暗,卻一再的蘇醒央串。...
    纖纖閱讀 852評(píng)論 0 2
  • Sometimes 不能在代碼里把任務(wù)網(wǎng)址寫死磨澡,需要?jiǎng)討B(tài)傳參給 spider ,以適應(yīng)任務(wù)需求 首先得定義一個(gè) _...
    Traim閱讀 2,632評(píng)論 0 1