前后端分离和开发模式

这里就不谈论前后端分离的历史了。前后端分离搞了很久。随着前端技术越来越复杂,客户对前端的要求日益上升。以能搞定全功能模块的全栈工程师为例,以往可能分配在前端的时间大概占 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的前端呢?

:)

posted @ 2016-12-27 13:44  Inshua  阅读(10404)  评论(0编辑  收藏  举报