話說這天,我們團隊開會討論了一個問題,不,與其說“討論”,不如說“爭吵”更合適,
背景是這樣的:
我們要開發一個 xxx 后臺管理系統,這個系統業務復雜、功能又多,大家的爭吵集中在“這個系統是否應該用前后端分離的方案”,
這次爭吵的問題比較典型,于是我就寫了這篇文章,為了大家好理解,把“xxx 后臺管理系統”泛化一下,變成:
開發一個大型后臺管理系統,應該用前后端分離的技術方案嗎?
先說一下,本文中的觀點肯定有人不認同,再加上我對前端技術掌握有限,所以大家批判的看吧,
1. 先審題,冷靜的分析一下
前后端分離的優點多多,這不需要多說,大家人人都清楚,
來,討論之前,我們先一起好好審審題,
結合“開發一個大型后臺管理系統”這個約束條件,冷靜的分析一下:
? 什么是后臺管理系統:首先后臺管理系統這個稱呼,意味著這是一個 B 端系統,可以小到部門級應用(客戶投訴登記系統、辦公設備臺賬系統),大一點可以是大集團級核心系統(500 強保險公司客服、呼叫中心),可以是 ERP、CRM、OA(SAP、用友、泛微協同),可以是一個 B2C 電商的商城后臺、支付網關管理控制臺,可以是 Saas 的管理后臺(Salesforce、Teambition、Jira),可以大到阿里云控制臺……
? 什么是大型:我理解大型系統是指功能模塊多、互動復雜,而不是訪問量、TPS、資料量大,所以 CMS、OA、ERP、CRM、阿里云后臺、呼叫中心等各種管理系統,滿足功能多、邏輯復雜,基本可以稱為大型系統,雖然他們體量和交易量可能不在一個量級,另外大型系統基本等價于“維護周期長,需求不斷變更”,這個在后面維護成本部分闡述,
? 性能考量不是主要決定因素:因為我們這里討論的是 B 端系統的前端技術選型,因此我的觀點是性能不是主要考慮因素,因為性能瓶頸往往在后端和資料庫,其次 B 端產品少有爆發性交易量(秒殺 大促 活動),最后 B 端產品不強調首屏渲染速度,
? UI 操作效率是最主要考核指標:B 端系統產品都是用來干活兒、管理、生產調度的,操作效率和方便性大于天,螢屏空間要充分利用,減少切換跳轉彈窗;快捷鍵效率遠高于滑鼠;SPA 多頁簽布局有利于保持作業背景關系和狀態;必要時可以滑鼠右鍵選單操作;功能選單操作提示要清晰易理解,減少培訓麻煩;在此基礎上,盡量減少每一個界面上呈現的資訊量,只呈現最少的必要資訊,降低用戶認知壓力,
? UI 開發效率高、維護成本低是關鍵考量因素:大型系統基本等價于“維護周期長、需求不斷變更”,因此在技術選型上盡量要求維護成本低、學習成本低、招聘容易、組件化程度高代碼簡潔……
? UI 顏值美觀度不是關鍵考量方面:界面簡潔大方、圖表豐富、資料展現清晰,這其實本身就是一種美——樸素實用的美,
? 瀏覽器兼容性:這條要看具體情況——Saas要求兼容性高;內網系統、內部系統可以要求瀏覽器產品和版本,
2. 亮觀點
基于上述,所以我的觀點就是:
前后端分離對于大部分“大型后臺管理系統”來說弊大于利,
大型后臺管理系統,相對于 C 端產品,B 端產品隱含等價于“業務邏輯復雜”,我不是說 B 端比 C 端產品難做,C 端有另外的難度(比如用戶體驗、比如競品之間的競爭更加激烈、比如并發量挑戰、比如做活動的需求頻繁……),
通常來說,復雜業務邏輯的產品需要產品、美工、開發各工種人員,密切配合、快速原型、MVP、快速迭代、快速試錯,因此,由后端工程師全堆疊開發的效率、效果,要高于前后端分離(這里說的“效果”指的是趁熱打鐵和技術主觀能動性的效果),
那種“產品畫框圖、再到做設計稿、再到前端切圖、最后扔給程式員渲染模板”的傳統開發流水線,會徹底拖慢一個業務需求從想法到交付的周期,會徹底割裂整個團隊,會遺漏大量的背景關系資訊,會增加巨大溝通成本,會徹底磨滅專案成員的參與感和對產品的歸屬感,
畫圖仔、切圖仔和碼農,按部就班像流水線擰螺絲一樣開發產品,很難創建出一個有靈魂有靈性的產品!
更不用提前后端分離造成的開發、聯調、部署、定介面、維護介面的成本提高,
另外,前后端分離也不適合專案型公司,因為專案周期有限,團隊磨合的時間越少越好,還有,專案交付后,留守的人員配置不齊,導致需求變更和維護問題難以解決,
綜上:前后端分離的開發和部署模式,不太適合“大型后臺管理系統”,原因 一方面是上面列舉的種種弊端,另一方面是大型后臺管理系統無法享受到前后端分離的好處:Nginx 分開部署的優勢、專業前端優勢(C 端產品追求極致的顏值和用戶體驗),
既然這么多弊端,為什么還有很多“大型后臺管理系統”之類的專案,跟風搞前后端分離呢?
答案主要集中在兩類:簡歷驅動的技術選型、盲目跟風,
3. 簡歷驅動的技術選型
軟體開發絕對是個良心活兒,跟醫生、教師一樣的,
我這幾年見到了太多的微型團隊(10人以下)搞微服務架構,以及前后端分離的 CMS 內容管理系統!
見了太多為了用時髦技術而盲目選型的事情,太多不計后果、不計成本的追求新技術來美化自己簡歷,太多用流行技術名詞忽悠自己不懂技術的老板、上司的情況,
你們的良心不會痛嗎?
當你在簡歷上加上了一個個流行技術關鍵詞,然后拍拍屁股離開了一個爛尾的專案、一個預算嚴重超支的專案,讓創業團隊多走幾年彎路甚至夭折,你的良心和職業素養都破產了!
你正在透支技術人這個群體的社會聲譽,
技術人的天職,本應是把復雜模糊的現實世界問題,建模成清晰邏輯結構化的計算機軟硬體,讓世界變得更簡單高效,如果因為一些奇怪的原因而把簡單問題復雜化,那就是背離了這個行業的初衷,
希望越來越多的甲方、非技術出身的高管們明白一個道理:
靠譜的人是把解決方案做的很簡單以至于明顯沒有問題,不靠譜的人會把解決方案做的毫無必要的復雜以至于短時間內看不出明顯的問題,
4. 前后端分離不是壞的,跟風才是壞的
前后端分離的出現和存在,當然有它的合理性和優勢,
這里插一句,說起前后端分離,必須先介紹一下 Angular、React、Vue,絕對是前端領域的三大當紅花旦,但是這三大花旦,也讓無數碼農陷入選擇困難癥,引發了大量無休無止的爭論,很多討論,當事人已經忘記了討論的初衷和邊界,最后陷入無意義的口水戰,
看看誰創造了它們——谷歌的 Angular、Facebook 的 React、阿里的 antd、餓了么的 element、前谷歌程式員尤雨溪創建的 Vue,
總之就是大廠在創造和使用這些技術,這些技術能解決別人的問題,但是不一定能解決你的問題,
彼之良藥,汝之砒霜,
所以我建議:在前后端分離、前端技術選型這種問題上不要盲目跟風,不要覺得跟著互聯網大廠走就一定不會錯,你需要清楚你的專案型別、團隊結構、技術沉淀、開發周期……
如果你和大廠一樣,不差錢、不缺資源,那沒的說,盡管選最好最貴、對標一線大廠技術堆疊,甚至是直接從大廠挖人,
如果你是做專案賺辛苦錢,或者自己投資研發產品,在傳統行業、在產業互聯網精耕細作,慢慢摸索培育市場,不在風口不受風投追捧的,那我覺得你需要務實一些,
我建議各位本著務實和誠實的態度、職業精神操守,結合自己公司、團隊、資源、專案、業務需求,選擇最適合自己的技術堆疊,
希望這篇文章對你幫助,有不同觀點歡迎通過公眾號和我討論,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/178798.html
標籤:Java
上一篇:藍橋杯2020年真題:網路分析
下一篇:如何設計一個安全的對外介面?
