摘要:最后討論決定自己開發一個框架,于是就開始了整體框架的設計。設計框架首先是底層框架,設計底層框架的第一個問題就是如何管理框架的所有類及其依賴關系,對比成熟的方案有依賴注入和基于組件設計兩種方案。
背景
事情源于在做框架選型的時候,我們對業務需要的技術棧進行了分析,發現我們需要的框架只需要包含路由、數據庫、Redis、日志,就可以滿足需求了,大家討論后開始著手框架的選擇。
選型討論框架選型時部分人意見偏向使用Laravel、Yii這種富功能框架,這些框架提供的功能是完全可以滿足業務需求的,然而反對的意見則是這些框架的學習成本比較高,新人接手不容易,而且性能較差,很多特性都用不到;而另一部分人則偏向于使用Slim、Yaf, 框架提供了基本的路由,其他功能組件則通過lib加載進來,這樣就可以按需加載各種功能組件,沒有多余的feature,學習成本相對較小,同樣這種方案也有很多反對意見,各個組件是否能與框架結合的很好,每個lib有各自的API風格,學習成本也不小,而且如何保障各個lib的穩定性。
在這樣的情況下,就有了構件一個滿足各方需求框架的想法,團隊希望框架只包含了常用的功能組件,像Event、Behavior、Broadcasting、Notification這些很少用到的功能盡量不需要,減少不必要的學習成本;為了支持一些業務千萬級的PV,希望框架的性能足夠好;同時希望框架的可維護性較好,針對一些特殊的場景,框架能提供良好的擴展能力,將一些功能集成到框架里。
最后討論決定自己開發一個框架,于是就開始了整體框架的設計。
設計 框架首先是底層框架,設計底層框架的第一個問題就是如何管理框架的所有類及其依賴關系,對比成熟的方案有依賴注入和基于組件設計兩種方案。由于考慮后續需要對各個組件進行單元測試,選擇了依賴注入的方案。
功能組件第二個就是框架的核心組件,框架包含的基本功能組件有數據庫、驗證、日志、Session、Cookie、Redis等,封裝這些組件有兩種方案,可以采用外部開源的composer組件,或者自己實現,由于不同composer庫API風格不一致,而且很多庫require文件太多,決定這些核心組件均自己實現。
易用性要完成一件事,很多富功能框架提供了多種方式,在開發一個功能時,既可以使用A方法,又可以使用B方法,有時用戶可能很迷惑,到底應該用哪個呢;而且隨著業務迭代,到處是各種異同的使用方式。所以我們偏向于只提供單一的方式,減少用戶選擇的困惑,同時提供系統的可維護性。
擴展框架包含了常用的基礎組件,為了支持使用一些特殊的組件,框架集成了composer,并且提供了基于組件的擴展能力。
總結最后,經過三個多月開發,框架開發完成,并且已經成熟在幾個產品使用;框架的有些地方可能還需要不斷優化,也歡迎大家提及各種Issue,我們的目標是打造一款國內、優秀的PHP框架。
最后直接列一下框架以及開發手冊。:)
BetePHP: https://github.com/betephp/be...
中文手冊: http://betephp.com/zh/
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/50504.html
摘要:最后討論決定自己開發一個框架,于是就開始了整體框架的設計。設計框架首先是底層框架,設計底層框架的第一個問題就是如何管理框架的所有類及其依賴關系,對比成熟的方案有依賴注入和基于組件設計兩種方案。 背景 事情源于在做框架選型的時候,我們對業務需要的技術棧進行了分析,發現我們需要的框架只需要包含路由、數據庫、Redis、日志,就可以滿足需求了,大家討論后開始著手框架的選擇。 選型 討論框架選...
摘要:最后討論決定自己開發一個框架,于是就開始了整體框架的設計。設計框架首先是底層框架,設計底層框架的第一個問題就是如何管理框架的所有類及其依賴關系,對比成熟的方案有依賴注入和基于組件設計兩種方案。 背景 事情源于在做框架選型的時候,我們對業務需要的技術棧進行了分析,發現我們需要的框架只需要包含路由、數據庫、Redis、日志,就可以滿足需求了,大家討論后開始著手框架的選擇。 選型 討論框架選...
摘要:最后討論決定自己開發一個框架,于是就開始了整體框架的設計。設計框架首先是底層框架,設計底層框架的第一個問題就是如何管理框架的所有類及其依賴關系,對比成熟的方案有依賴注入和基于組件設計兩種方案。 背景 事情源于在做框架選型的時候,我們對業務需要的技術棧進行了分析,發現我們需要的框架只需要包含路由、數據庫、Redis、日志,就可以滿足需求了,大家討論后開始著手框架的選擇。 選型 討論框架選...
摘要:前言年底了不太忙,最近一段時間也一直在研究,就想寫篇關于比較深一點的教程系列啥的,于是就找到站長給開了寫教程的渠道。優點的就是為藝術家創造的框架,它也是工程化的趨勢。項目維護方便也是事實。如果有遇到問題可以直接在教程下面留言。 前言 年底了不太忙,最近一段時間也一直在研究laravel,就想寫篇關于laravel比較深一點的教程系列啥的,于是就找到站長給開了寫教程的渠道。由于第一次寫,...
摘要:異步隊列消費者開發只提供了模式下運行控制器方法,并未提供主進程多子進程的進程模型,并未提供多線程處理。多線程異步隊列服務只需寫好控制器方法,然后在配置文件中配置下路由命名空間進程線程數量,就可在模式中啟動多進程多線程模型的異步隊列處理程序。 最近業余時間一直在開發ExpressPHP的第二個版本 MixPHP,今天下班想起之前一個面試官的問題:你為什么還要再造一個輪子呢?仔細回想,第一...
閱讀 3564·2021-11-16 11:45
閱讀 2099·2021-11-08 13:23
閱讀 2212·2021-10-11 10:59
閱讀 2892·2021-09-27 13:36
閱讀 2481·2019-08-30 15:54
閱讀 2669·2019-08-29 16:58
閱讀 2783·2019-08-29 16:56
閱讀 1343·2019-08-26 13:52