這個問題是我面試的經常使用起手問題,因此在SF看到這個提問的時候,就抽時間回答了一下。這裏作一些整理和補充。php
不少時候,討論問題從摳概念出發是個好想法。框架是團隊在項目初期選定的開發框架,或者在長期開發過程當中提煉的公共邏輯等。因此不管是初期挑選框架、是中途重構更換框架、仍是須要抽離團隊內部本身的框架,都應當如下面三個角度綜合考慮git
團隊github
項目web
框架自己面試
若是團隊如今和將來都只有你一我的(好比本身的toy project),那選本身最想用的就好。但只要不是這個狀況,你最好先得了解市面上常見的各類框架,而後忘記本身的我的偏好。express
<!--more-->npm
瞭解你的團隊成員的如今狀況,考慮你的團隊將來的發展速度,將來可能加入的團隊成員的狀況,以及你所在地職業市場狀況。打比方說,Laravel常常是個不錯的選擇,但若是你在產業不發達的小城市,團隊又必須高速發展大量招人,選擇Laravel可能很快會讓你陷進「composer和現代PHP技能培訓班」的窘境,而一些更「接地氣」的框架則能讓你的團隊迅速擴張,快速知足業務發展的需求segmentfault
有的項目,做爲貴司的主營業務是須要長期維護,持續迭代的。而另外一些項目可能做爲一些邊角、過渡的項目,可能作完之後不會再有什麼後續的需求。最後還有一些外包/類外包的項目,交付之後就沒有需求/後續需求能夠當另外一個項目。安全
再大的項目,需求再多,若是是第三種,無需考慮將來演變的,那麼框架的擴展性就可以被犧牲(從而換取開發速度或其餘好處),打比方說基於一些成品二次開發的選擇就能夠被考慮。再小的項目,若是是貴司的主營業務,持續迭代的,那麼就算工做量再小,也必須慎重考慮框架的擴展性。架構
那麼,什麼是框架的擴展性呢? CI是擴展性很好的框架嗎?ZendFramework1/2是擴展性很好的框架嗎?
答案是,看將來演變方向。有的項目將來的壓力在訪問流量大,有的壓力在數據量大檢索頻繁,也有項目壓力在需求迭代快,變更頻繁而週期短。項目面臨的問題越是廣泛,那麼預設各類解決方案的框架可能越能減小重複造輪子,反之項目面臨的問題越是極端,那麼輕量化的那些框架可能更適合讓你的團隊本身研究解決方案對接到框架中。另外,項目維護的時間越長,變更越難預測,採用預設各類解決方案的框架的風險就會越大(那些預設的解決方案剛好能解決你的每一個問題的機率愈來愈小)
性能和跑分。除了phalcon和Yaf兩個C實現的框架,其餘框架請認爲同樣快。另外除非你在主持相似新浪微博更換PHP框架這樣的事,或者說除非你管理的項目web機器超過100臺,請忽略PHP框架的性能因素
psr和composer親和性。這是雙刃劍,前面已經聊過怎麼看待這個特質了。
安全性。某些框架甚至自己本身有安全漏洞很少說。另外若是框架層面提供了一些安全方面的東西,建議仍是要簡單看一遍代碼,有時那可能反而不如本身寫。
功能性。也就是預設的解決方案的數量和質量,前面有提過。
模塊化程度。框架內的各個部分是否可以自定義,自定義的代價多高。另外一個角度是框架的各個部分是否能脫離框架運行。
表達能力(業務功能須要多少代碼量來實現),這三個特性(表達能力、功能性、模塊化程度)互相沖突,沒法達到三者兼得。功能豐富,模塊化程度又高能夠隨意定製、替換的框架,每每普通的業務代碼也要寫一堆。一句話能寫出一大堆功能的框架,每每模塊化程度不理想,不容易自定義。 模塊化程度高,而業務代碼不囉嗦的框架,則每每沒有豐富的預設功能。
周邊生態和活躍程度以及兼容性。活躍的框架就還有成長和改進的空間,但相應過於活躍有時會致使應用沒法兼容。另外一個指標是周邊的生態,有沒有其餘人基於這個框架開發一些周邊的模塊/插件之類的東西,以及文檔的豐富程度、出問題後能是否容易找到的解決方案等。
(本節內容僅僅是我我的的判斷,另外基於中國國情,這個將來可能也仍是老外先享受到)
PHP是個相對古老的語言,PHP框架也是個至關古老的概念了。我認爲隔壁的NodeJS社區很好的爲咱們示範了真正「web框架」應有的形態。以依賴解決方案npm爲核心,connect
到express
爲表明的中間件架構爲骨架,周圍圍繞着星羅密佈的數不勝數的中間件。中間件架構設定了web請求和響應的標準接口,周圍的其餘項目以這些接口爲基礎開發各類功能。工程師要作的就是找到合適的中間件安插到項目中,或者本身寫合適本身狀況的中間件(固然最好是開源出來回報社區咯)。因而你會發現至關於「PHP框架」概念的那些項目基本行不通(sails已是作的最好的了?)
這也是我對將來PHP框架的判斷。大而全的「PHP框架」時代已通過去了。不用composer的,或者僞裝本身用composer的那些框架沒有將來。基於composer的,模塊化組件化的項目,將來在強勢的輸入輸出標準統一下,會爆發出驚人的生產力。symfony/http-foundation
原本是個不錯的選擇,社區也有對應的中間件化的努力。但目前看來,懷胎已久的PSR-7更可能成爲將來的贏家。有強力的標準和解構化的中間件生態,社區纔有充分的競爭,開發者纔有充分的選擇權,A2框架 視圖層巨爛但路由很漂亮,B2框架 路由好用但視圖糟糕?下一代A3和B3都同樣支持PSR-7,拿回家本身拼接就好!
廣告時間: 基於這樣的判斷,connect的PHP移植又沒有不少star的狀況下,我花了一些時間擼了本身的中間件架構mcfog/nimo,歡迎圍觀和star