这里就不谈论先后端分离的历史了。先后端分离搞了好久。随着前端技术愈来愈复杂,客户对前端的要求日益上升。以能搞定全功能模块的全栈工程师为例,以往可能分配在前端的时间大概占 60%-70%,如今估计得上升到 80%-90% 了。html
如今流行的方法是先后端分割开,交给两班人马分别开发。以如今公司的某项目为例,该项目前端后端分为两个独立的工程,发布到两个独立的Web服务器,经过Nginx在聚合呈现为一个网站。该项目进行了 2年多,开发人员各自技能却是日益精深了,项目进展却十分缓慢。修改功能必须配合行动,前端融合 session 内容分别输出都难以实施。回过头看,这种一个功能两我的协商接口或者架构师定好接口分别开发的方式是不恰当的。这种先后端切割方式加重了沟通成本,也下降了对业务变动的响应能力。前端
我之前的开发方式是先后端合并的,每一个程序员都须要开发完整功能。当时的框架相似 d2js,前端功能不甚复杂,后端因为框架简单变得很简单,虽然框架支持先后端分离,但开发中仍然保持全栈式开发。html5
后来接触的公司里,南京某公司的作法值得借鉴。该司后端由PHP实现,PHP程序员负责完成一个粗糙简单的页面(一片白,无任何CSS)。功能完成后,前端对该页面进行美化。该司使用的是跳转方式,不是AJAX方式,前端对后端有强依赖。node
如今我采起的办法是,保持全栈的存在。根据功能特色,管理为主的,全栈完成主要功能,前端负责跟进美化,操做为主的,前端完成UI,后端再适当配合。复杂UI能够组件化的,前端造成组件后供全栈使用。布局始终由前端负责,但涉及权限的,交给后端。非AJAX的,后端完成后前端美化。程序员
这个方式的优势有:编程
1. 完成功能优先。如今已经发现,美化界面工做会极大拖长工期。后端
2. 全栈发展较为全面,和单独的后端、前端均可以作有效沟通。避免了先后端想法不一样致使前端干一天后端干一天对接又一天。服务器
3. 无先后端沟通成本,全栈人员对于业务的理解更透彻,甚至能够独立完成原型构想。网络
4. 发挥了组件化技术的潜力,前端完成的组件能够供全栈搭配,全栈设计的前端页面也是一个组件,可供前端用于布局。session
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的前端呢?
:)