前后端分离的开发模式,原本觉得没什么稀奇的玩艺,在最近参与的一个大型项目中,让我有了更深的理解。
前后端分离的开发模式:系统分析阶段,系分和前端开发人员约定好页面上所需的逻辑变量,进入功能开发阶段,前端开发人员进行前台页面结构,样式,行为层的代码编写,并根据约定好的变量,逻辑规则,完成不同情况展示不同的表现。而后端开发人员,只需要按照约定,赋予这些变量含义,并提供前后端交互所需要的数据即可。
以前自己在php上玩过mvc开发框架,但是没有在这么大型的项目中实践过,所以过程中暴露出一些问题,也说明现实和理想还是存在一定差距的。
对项目中遇见的问题做了如下纪录:
A.对交互白板的理解不足,如:对ajax实现大批量数据交互的实现,没有及时给出改进的建议
B.系分阶段产出的约定变的非常脆弱,开发过程中不时有新的东西和变更的东西出现,这就导致后面的前后端协作开发有些纠结
C.项目过程中,由于前期与需求方,设计师,系分的沟通力度不够,导致开发过程中发现很多考虑的不够周全的地方
D.项目开发过程中前后端开发资源的配比上较为悬殊,在后期频繁需求变更中,前端一直处于:勉强应付状态
可见,上面提到的这些,多是沟通和协作上的问题,以下是对这次初体验的小结,希望对前端开发工程师有所借鉴:
沟通:项目开发之前,尽可能主动的和系统分析师和交互设计师多沟通,确定页面中交互与服务器端交换数据的接口、方式、格式等,让前后端约定更丰满一些。因为她越丰满,后面的纠结就越少。
A.向前设计,参与到前期的交互设计的讨论中去,去理解设计,向后开发,去了解后端开发工程师关心的是什么,不想要关心的是什么,担心的是什么,学会站在对方的角度上去看问题
B.必须确认交互白板中各类出错场景以及出错提示文案是否完整,要求后台开发人员补充交互设计师无法知晓的后端异常出错的场景,并要求交互设计师给出相应的提示文案
C.明确交互效果中,哪些是需要通过ajax实现的,并与开发人员约定好数据接口,方式,格式等,并确认数据交互失败的情况下是否有文案提示,如无,主动找交互设计师补充该类场景的文案提示
协作:功能开发过程中,需要建立一个共同调试的环境,方便前后端同学协同开发。
A.有些数据接口api以及数据格式也许会到开发中才能够确认下来。可以有个接口文档。如果大家都知道彼此对业务规则都熟悉,可以在开发中逐个确认。无论如何,接口文档是必须的。它记录着在系统层面对业务的抽象。接口细节可以在开发中逐渐完善。
B.总有那么一些文件,是前后端开发人员都会修改的。这些敏感文件,修改前以及修改完毕都要知会后端开发人员。而且要养成edit前update的习惯。如果出现冲突,冲突最好能够一起解决,或者及时告知。避免再次冲突。
C,项目中前后端资源配比应该适当,1:10的资源配比想推起前后端分离的开发模式还是比较困难的,个人认为1:3是比较适中的配比。
出于前后端资源配比,系统分析阶段还不够详细等原因,在一些大型的项目中,对分离开发模式进行了一些调整,说实在的有些不得以,但是这应该是目前最符合现状的前后端分离的开发模式,抱着发展的眼光向前看,前端不断壮大之后,应该会有让人满意的答卷的!
在功能开发阶段,由于项目比较大,一般会分解功能,这样的话就很难提供出一个功能相对稳定的前后端共同调试环境,再加上资源配比太过悬殊,所以建议在功能开发还不稳定这个阶段,前端开发资源以协助开发的角色进入,由后端开发人员参照系分阶段约定好的数据类型和接口提供数据和嵌套页面逻辑,当功能开发相对稳定以后,前端开发人员对嵌套后的前台内容进行验收,此时,前后端开发的DEBUG工作就可以并行操作了。
同发老鱼在线


不错,先收藏了,以后应该用的上
不错的分享,前端的价值不在于web开发阶段,它渗透在项目的各个环节中
谢啦!~
正巧,偶手头的项目也做了此方面的实践:
补充几点:
1. 前后端按照接口各自写好自己测试,自行验收(相当重要,否则DEBUG成本大大的)。
2. 开发文档最好也进行版本管理并同步。
3. 一些视觉/交互的东西(不涉及前后台通信的),可以在功能整合完毕后再行单独开发。即先开发完基础功能后再整合体验(视觉、行为)层,当然这可能需要跟设计方面有一个较好的沟通,能够有效地分离基础功能和强化体验的部分。
这种思路相当不错..学习了
阿里的UED总能够给我们带来很好的东西
不错的分享
米人老鱼,很感兴趣你这个项目实践,希望有机会能和你深入聊聊。
我一激动,就写了一篇读后感,见:
http://dingyu.me/blog/posts/view/a-slow-boat-to-china
07年我代理PM时试过此方法,主要还是团队磨合问题。
尤其在“敏捷迭代”中效果非常好,从想法到需求,完全可以实现两条线独立并行。
http://blog.rexsong.com/?p=2365
我感觉,对于复杂交互式的web应用,前后端分离开发不是解决之道,而应该回归CS开发思想,开发一整套基于web的CS框架,否则项目划分、开发、调试都回非常困难。
web开发复杂与传统CS开发的关键在于web开发需要多种语言同时进行,至少html、css、javascript+后端语言
现在我能想到的是,用后端语言,比如php/java/python等,实现一套前端引擎,支持html、css、javascript的实现(这个很难)。要么实现一套开发环境,能够同时兼容并且方便调试各种语言。Aptana就是在试图解决这些问题。一方面实现开发环境,另一方面,他实现一个server端的javascript引擎,用js统一前后端开发,不过我很担心js的性能以及扩展性。
今天查看图片的时候看见这张前后端分离的开发模式图,没想到这会竟然找到了文章了