说到这一天,我们组开会讨论一个问题,不,与其说是“讨论”,不如说是“吵架”更合适。背景是这样的:我们要开发一个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、快速迭代、快速试错。所以后端工程师全栈开发的效率和效果要高于前后端分离(这里所说的“效果”是指趁热打铁的效果,技术主观性强)倡议)。传统的“产品框架图,然后做设计稿,再到前端裁剪,最后丢给程序员渲染模板”的开发流水线,将彻底拖慢一个业务需求从创意到交付的周期,彻底拆分整个Teams会遗漏很多上下文信息,会增加巨大的沟通成本,也会完全抹杀项目成员的参与感和对产品的归属感。花图仔、切图仔和码农们一步步开发产品,就像在流水线上拧螺丝一样。很难创造出有灵魂、有灵性的产品!更不用说提前分离后端带来的开发、联调、部署、接口设置、接口维护等成本的增加。另外,前后端分离不适合项目型公司,因为项目周期有限,团队磨合的时间越少越好。此外,项目交付后,留守人员分配不均,难以解决需求变更和维护问题。总结一下:前后端分离的开发部署模式不适合“大型后台管理系统”。分离部署优势和专业前端优势(C端产品追求极致的外观和用户体验)。既然弊端如此之多,为什么还有很多“大型后台管理系统”之类的项目跟风前后端分离呢?答案主要集中在两类:简历驱动的技术选择和盲目跟风。3、开发简历驱动的技术选拔软件,绝对是一个良心工作,就像医生和老师一样。这几年看到太多微团队(不到10人)搞微服务架构,前后端分离的CMS内容管理系统!我见过太多为了赶时髦技术而盲目选机型的例子,见过太多为了美化自己的简历而不顾后果和成本追求新技术的例子,见过太多用流行的技术术语来忽悠做新技术的老板和上司的例子。不懂技术。你的良心不会痛吗?当你在简历中加入热门技术关键词,然后拍拍屁股留下一个未完成的项目,一个严重超支的项目,导致创业团队多走几条弯路甚至死亡,你的良心和职业素养就破产了!你在透支这群技术人的社会名誉。技术人员的职责应该是将复杂和模糊的现实世界问题建模为清晰且逻辑结构清晰的计算机软件和硬件,使世界更简单、更高效。如果因为一些莫名其妙的原因把简单的问题复杂化,那就是背离了这个行业的初衷。希望越来越多的非技术背景的甲方和高管明白一个道理:靠谱的人把解决方案简单到明明没有问题,不靠谱的人把解决方案简单到没有问题。不必要的复杂,以至于短时间内看不到明显的问题。4、前后端分离不错,跟风不好。前后端分离的出现和存在,当然有其合理性和优势。我在这里补充一句。说到前后端分离,首先要介绍一下Angular、React、Vue,这绝对是前端领域的三大当红明星。然而,这三个女性角色也让无数数码农陷入了选择的困境,引发了诸多无休止的争论。在多次讨论中,各方都忘记了讨论的初衷和界限,最终陷入毫无意义的口水战。看看是谁创造的——谷歌的Angular,Facebook的React,阿里的antd,饿了么的element,前谷歌程序员游雨溪创造了Vue。简而言之,大工厂正在创造和使用这些技术。这些技术可以解决别人的问题,但未必能解决你的问题。他的药就是你的砒霜。所以我建议:在前后端分离、前端技术的选择上不要盲目跟风,不要认为跟着互联网大公司就一定是对的.你需要清楚自己的项目类型、团队结构、技术积累、开发周期……如果你不是像大厂一样缺钱缺资源,那选择最好最贵的,对标一线也无妨大厂技术栈,甚至直接从大厂挖人。如果你是做项目挣辛苦钱,或者自己投资研发产品,在传统行业和产业互联网深耕细作,慢慢摸索和培育市场,不被风投追捧,那我觉得你需要更务实。我建议大家本着务实诚信的态度和职业操守,结合自己的公司、团队、资源、项目、业务需求,选择最适合自己的技术栈。希望这篇文章对你有所帮助,有不同意见欢迎通过公众号与我讨论。
