前后端分離和開發模式


這里就不談論前后端分離的歷史了。前后端分離搞了很久。隨着前端技術越來越復雜,客戶對前端的要求日益上升。以能搞定全功能模塊的全棧工程師為例,以往可能分配在前端的時間大概占 60%-70%,現在估計得上升到 80%-90% 了。

現在流行的方法是前后端分割開,交給兩班人馬分別開發。以現在公司的某項目為例,該項目前端后端分為兩個獨立的工程,發布到兩個獨立的Web服務器,通過Nginx在聚合呈現為一個網站。該項目進行了 2年多,開發人員各自技能倒是日益精深了,項目進展卻十分緩慢。修改功能必須配合行動,前端融合 session 內容分別輸出都難以實施。回過頭看,這種一個功能兩個人協商接口或者架構師定好接口分別開發的方式是不恰當的。這種前后端切割方式加劇了溝通成本,也降低了對業務變更的響應能力。

我以前的開發方式是前后端合並的,每個程序員都需要開發完整功能。當時的框架類似 d2js,前端功能不甚復雜,后端由於框架簡單變得很簡單,雖然框架支持前后端分離,但開發中仍然保持全棧式開發。

后來接觸的公司里,南京某公司的做法值得借鑒。該司后端由PHP實現,PHP程序員負責完成一個粗糙簡單的頁面(一片白,無任何CSS)。功能完成后,前端對該頁面進行美化。該司使用的是跳轉方式,不是AJAX方式,前端對后端有強依賴。

現在我采取的辦法是,保持全棧的存在。根據功能特點,管理為主的,全棧完成主要功能,前端負責跟進美化,操作為主的,前端完成UI,后端再適當配合。復雜UI可以組件化的,前端形成組件后供全棧使用。布局始終由前端負責,但涉及權限的,交給后端。非AJAX的,后端完成后前端美化。

這個方式的優點有:

1. 完成功能優先。現在已經發現,美化界面工作會極大拖長工期。

2. 全棧發展較為全面,和單獨的后端、前端都可以做有效溝通。避免了前后端想法不同導致前端干一天后端干一天對接又一天。

3. 無前后端溝通成本,全棧人員對於業務的理解更透徹,甚至可以獨立完成原型構想。

4. 發揮了組件化技術的潛力,前端完成的組件可以供全棧搭配,全棧設計的前端頁面也是一個組件,可供前端用於布局。

5. 前端基本能脫離業務。從這個角度看,分工其實更細了。

6. 后端開發的不只得到一個接口,而是真正設計出可以看到的能運行的頁面(當然,這樣后端也就是全棧了)。我一直強調能展示。后端接口+文檔是不討人喜歡的,通訊協議里沒有 SAMPLE 是十分費解的。MOLECULE 是具有SAMPLE的組件設計方案,MOLECULE 組件正好包含在HTML頁面中,該HTML頁面既是組件的容器,也是組件的SAMPLE,可以打開,打開就能看到運行起來的組件,對我來說這才是一個完備的組件。現在出現一種 MOCK 開發工序,指后端開發完接口后,生成調用UI供試用,說來這項技術在2009年我就已經發明了。當時的接口是基於 JAVA 的 DSL,分析 DSL 就可以得到 MOCK 測試 UI。

和很多框架不同,d2js 框架是一個前后端框架,前端后端互相配合,又相對獨立,可分可合。能設計出這樣的框架,也得益於本人對於前后端都有清晰超前的認識。

記得很早之前思考一個理想人的問題。假如某個人無所不能,前后端開發都會、產品設計、UI設計、商務等等,無所不能,可以想象,如果這個人有10倍於人的效率,他能帶來的產出將遠大於10個人的公司。設計工作流程,組織架構,可以將組織設想為一個盡力完善的理想人。

說到這里,可能有人會輕率得出結論:最好的組織架構就是一個大腦統領身體,具有強大的執行力,指哪兒打哪兒。這個模式是行得通的,如果這個大腦與身體切實無礙的連通。有一些人,比如喬布斯,確實可以做到這一點。喬布斯是產品經理型的人,不是編程高手但懂編程,可能也不能使用Photoshop 但是通曉設計。這顆大腦可以參與技術討論,也可以參與設計的討論。正如神經元的突觸,喬布斯的神經元可以與各類其他神經元互相激活。

如果公司領袖的大腦足夠健壯,可以形成一種星型拓撲的聯邦結構。

但后來的研究表明,人類的神經系統並不是這種大腦控制一切的中樞控制式的系統。人類的很多行為都不需要大腦干預,而是形成一個個自組織式的聚落小系統。如消化器官的消化活動,敲擊鍵盤的活動中手指的控制,都是部分區域的神經網絡完成的。以往認為,大腦神經皮層按分區行使不同職能。現在發現,當某個分區受損時,其它區域的皮層也可以轉化出相應功能。甚至有一個著名的醫學案例:無腦人。

Brain of a white-collar worker - The Lancet
http://www.thelancet.com/journals/lancet/article/PIIS0140-6736(07)61127-1/fulltext

分工日益復雜后,一個大腦聯絡支配所有大腦的思維已經行不通。作為最高BOSS,同時通曉公司所有技能已不現實,所能進行的是找到能理解戰略,形成戰術上的思路,能互動的大腦,如能形成市場戰術、產品戰術、研發戰術、運維戰術、生產戰術的大腦。

BOSS 可以采取捉對廝殺策略,自己和市場、產品、研發、運維等分別溝通。但如果市場、產品、運維等之間存在互相溝通,團隊情況會好得多。

1. 各個分工角色對整體事業的認識更深

2. 事業中有自己的認知,更有成就感

3. 不同的視角互相刺激,可以形成更好的方案

4. 各角色從單薄的認知化為復合認知,戰斗力更強

也就是說:中層之間可以溝通可以造成更多神經元之間的刺激機會,使不同的大腦組成更大的神經網絡,打造更活躍的團隊。可想而知,大腦之間享有的共同熱點越多,共振會越強。

一般來說,由於分工壁壘,互相了解程度僅止於原理性了解,不可能做到交換分工也能上崗。

一個人同時掌握 JAVA 框架和 JS 語言似乎並不現實,但和 nodejs 一樣,d2js 也是 js 語言打通前后端的框架,使用 d2js 框架,一個人同時通曉前后端並非難事。d2js 培訓成本非常低,一般來說培訓不到5個工作日就可以上手,有的人通過自學也能在數日內掌握 d2js。這種開發方式戰斗力要顯著優於前后端機械割裂的方式。

能否由前端實現UI設計后,全棧將其變為可以活動的呢?我認為完全可以!我會在后面的項目中進行嘗試。

這里又出現一個問題,有沒有兼習UI設計又懂html5的前端呢?

:)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM