现在开发网站web应用一定要前后端分离吗?
时间:2023-11-29 16:12:01 | 来源:网站运营
时间:2023-11-29 16:12:01 来源:网站运营
现在开发网站web应用一定要前后端分离吗?:
前后端分离架构有利有弊,需要根据具体场景来判断。前后端分离比较适合中大型公司,或者中大型项目。因为在中大型公司里面,开发人员较多,分工明确。前后端分离可以让不同的人专注在自己擅长的领域。当然也存在一些问题,比如沟通成本也成本会增加,全链路优化成本会变高。大公司普遍的项目架构是前端 + BFF(Backend for frontend)+ 微服务,其中前端包括 h5 、移动端、pc 端等等。业界说的大前端可以理解为前端 + BFF。
如果你开发的是个人小项目,或者是小公司的一些小项目,
完全没有必要用前后端项目分离开发,因为前后端的代码可能就是一个人完成的。前后端分离反而降低了开发效率,需要在不同项目之间来回切换,甚至还需要定义各种类,如 DTO、VO、DO、BO 等等类。至于是否需要项目分离部署,这也要看情况,如果你希望通过 CDN 加速的话,那就分离部署,把前端部署到 CDN 上。不过小项目,也不是特别需要。
现在大公司,特别是国外,更喜欢全栈工程师,因为前后端分离架构带来的弊端越发明显了。将完整的项目纵向分工越细,带来的沟通成本越大,成本呈指数增加。如果你以前是全栈工程师,然后进入大公司后,负责一小块技术领域,你会感觉自己就像被捆绑住了手脚在做事一样,受多方牵制,效率极低。比如全链路 BUG 修复时,需要多方一起合作才能定位问题,甚至上游会要求你提供明确的证据证明使上游的问题,上游才愿意帮你调查,踢皮球是常有的事。另外,全链路优化变得十分困难,因为开发人员只负责很小的一部分,不了解其他部分,这样就没办法从一个上帝视角看整个项目。
前后端分离架构解决了大规模开发、人员合理分工、项目性能等问题,但是也带来了不少问题,让项目架构变得复杂,对开发、维护、运维都带来不少挑战,特别是人员之间的沟通成本。有没有更好的解决方案呢?
我觉得可以在框架层面解决上面的问题,通过技术层面去解决。既然沟通成本很大,那么我们就减少沟通,将一个大的项目横向拆分成一个个小的微应用,每个全栈开发人员负责其中一个完整的微应用的开发。这样就可以充分发挥出全栈工程师的效率,通过局部最优,达到全局最优。不管项目有多大,开发人员有多少,只要我们能合理拆分成微应用,我们沟通成本将是稳定可控的。
我最近在尝试做这样的一个框架 Malagu。首先,它是一个全方位渐进式的框架,你可以按传统前后端分离的方式开发应用,你也可以按全栈的方式开发应用,这两者之间是可以渐进式切换。如果你担心未来规模大了,想前后端分离开发,你可以先全栈模式开发,后期再切换为前后端分离开发。前后端分离部署也是一样,完全可以自由渐进式控制。
其次,它也是一个全栈框架,你可以用它来开发前端应用、后端应用、微服务、前后端一体化应用。为了让全栈开发体验达到极致,前后端开发语言都是用了 Typescript,这样我们就不用来回切换开发语言上下文了。了解更多有关 Malagu 框架背景。
基于 Malagu 已经上线不少业务项目,其中 Cellbang Cloud | 细胞云 应该算是最为复杂的项目了。
总的来说
Malagu 是基于 TypeScript 的 Serverless First、组件化、平台无关的渐进式应用框架。
特征
- 约定大于配置,零配置,开箱即用
- TypeScript 版 Spring Boot
- Serverless First
- 平台不锁定
- 支持前后端一体化,前端框架不锁定
- 支持微服务
- 组件化,渐进式
- 命令行工具插件化
- 依赖注入
- 面向切面编程(AOP)
- 集成了流行的 ORM 框架,使用装饰器声明式事务管理
- 支持 OIDC 认证
- 支持 OAuth2 授权
- 使用 rxjs 管理状态
- 提供 REST 和 RPC 两种接口风格