從事Web開發已經10年時間,近幾年也一直從事微博應用產品的研發。從原生php寫網站到使用cms bbs整合的大型站點,從使用各種流行的開源開發框架到成熟穩定的平臺級框架下做研發。這期間對應用型web開發框架設計有一些自己的理解和見解,在這裡和大家一起分享交流一下。
為了讓大家對框架的各個模組有較深的理解,我對模組職能角色匹配了三國人物,在這裡純屬為了增加大家的趣味性理解,如有不同見解可以在後面使勁得拍磚:)。
一個較成熟的框架圖如下:
三國人物和各個模組角色匹配如下:
一、單一入口(index.php)—門神關羽
一夫當關、萬夫莫開。這也是為啥諸葛亮把關羽安排在荊州這個戰略要地的原因。因為所有的請求都得經過它。它對請求安全、框架整體型起到至關作用。
二、路由(Router)–引路人徐庶
徐庶的成名之作就是把諸葛亮引薦給了劉備,從此使劉備的事業蒸蒸日上。其實這裡最主要說說他的“引路”的作用。一個專案的程式碼往往要承載各種的業務職能(PC、H5、Api、Manage等等)需要。部署肯定是隻有一個物理目錄,只不過需要配置不同的主機頭和別名,或者同一個域名下Uri 需要對映到不同規則的Controler。引路的路由模組對系統的遷移升級和適應業務擴充套件起到關鍵作用。但同時提醒一下,這個地方也是經常是因為變更而導致線上故障問題點。所以設計時保持大模組劃分下,細節儘量保持簡單
三、控制層(Controler)–掌櫃曹操
曹操就不需要過多文字對他畫像了。識人、決策、控制這些是Controler工作職能三要素。首先它要對所有的(GET、POST)傳入引數做驗證,安全過濾、合法性(識人品),然後進行業務判斷(決策)、需要呼叫哪個業務方法(控制),最後響應按不同格式輸出(json、html、二進位制)。基本幹這些活就夠了。大體上就是客戶帶著買賣來了,掌櫃的先看看人咋樣,人靠譜、具備買賣達成的條件、前櫃收錢後櫃出貨,買賣成交。這一層注意的地方就是不要有太多的業務邏輯在裡面否則後櫃的業務模型層的諸葛亮會很尷尬,搞的自己一堆業務邏輯在裡面,程式碼看起來很混亂,基本是自己找累。所以設計控制層一定要明確自己的三個職責。
四、業務模型層(Business Model)–勞模諸葛亮
Business Model 這個職能非諸葛亮莫屬,諸葛亮在三國演義中絕對是一位日理萬機的勞模。整個專案的業務裡外大小事務均得有它來完成,所以這一層需要對各種的業務需求有深刻理解後再進行程式碼編寫,寫好的類與函式既要抽象可重用也要滿足不同的業務場景需要。對於這一層雖然抽象和重用很重要,但是最重要的是條例清晰閱讀性好。產品需求變更和開發人員的變化在這一層體現非常明顯。
五、表示層(View)–戰神呂布
這一層基本是模板渲染了,有很部分框架使用smart模板,也有部分框架使用自己的模板語法。微博目前使用的是yaf框架模板引擎,它書寫語法是和原生php編寫是一樣的,書寫起來直接簡單,效能也超優,值得推薦給大家使用。
六、非同步處理(Queue、Cron)–幕後英雄趙雲
大型網站特別是像微博這樣高併發請求的產品。非同步處理肯定是必要的,執行方式有兩種:1、佇列處理、2、定時任務執行。趙雲經常是在諸葛亮授意下默默的去完成一些看不見但又是絕對重要的任務。這塊應該有注意二點:佇列監控、日誌收集。它們對線上提前發現問題和解決問題提供有力的保障。
七、介面層(Api)–外交官魯肅
一個平臺級產品在技術支撐上部門和人員需要拆解,每個部門和每個業務都會有自己獨立的服務模組。他們之間是需要相互依賴、相互呼叫的,友好、橋樑這就是魯肅外交官的作用,同是也是介面層(Api)設計的理念和原則。作為專案自身Api層的編寫需要內介面宣告和註釋說明清晰、對外需要保證雙方的呼叫穩定性。孫、劉兩家聯合據曹魯肅功不可沒。
八、資料層(Data)–後方夏侯敦
兵馬未動,糧草先行。在我每次啟動新專案研發時有個習慣:就是首先把資料層設計封裝好。儲存型別選擇(mysql、redis、其它),如何分庫、分表,快取的策略和命中率評估、crud介面設計。資料層質量高低對以後需求變更和系統擴容影響很大,同時它也是強有力的後方保障層。
九、快取層(MC)–良將張遼
張遼是一位不可多得良將正如Memcach讀寫效能一樣。這一層基本和資料層統一做設計和規劃,除了資料庫資料快取、也可以做介面快取、業務資料快取。但每份快取最好有統一的更新和清除介面,雖然多謝幾行程式碼但管理起來很方便。
十、通用類庫(Class Library)–謀士郭嘉
郭嘉也算是謀士智囊團的代表人物。各種的類庫都可以放在裡面例如:DB、MC、HTTP、字串處理、安全過濾、型別轉換、登入驗證等等。
經過了人物演義後形成如下陣型結構:
陣容隊形精英組合在三國打天下也無敵了,哈哈……
聊完了演義,最後還想和大家分享一下我對一款優秀的WEB開發框架特性理解和期待,總結有幾點:
- 1.框架結構清晰、書寫程式碼簡單易上手
- 2.框架定義規範,降低出錯的概率
- 3.良好的可運維性
- 4.對第三方友好相容
- 5.效能優越
- 6.強大功能整合
總之,“人力”和“電力”是網際網路公司最大的成本,一款優秀的開發框架可以把這兩個指標降到最低,並且讓每位程式設計師工作身心愉悅、程式設計能力神速提升,同時公司方面也能有很多的技術沉澱和積累。一舉多得、各方受益,豈不美哉。