引言
如何有效地提高开发效率,这样一个命题在我们公司已经提出过很多次了,公司管理层,各部门负责人,品质管理部以及公司内部每一个希望公司不断进步的成员都在为了解决这个命题,在公司内部通过不断宣传和鼓励,在作业实施的各个环节上实施推荐标准化,模块化,工具化,在表彰上设置技术人才奖项等一系列措施希望能够有效地解决这个课题。不可否认,公司的这些行为在一定程度上确实解决了很多问题,我所知道的,报价生产性统一化,品质审查工具Sonar的推广,项目完成之后项目成果的整理和归纳都对作业效率产生了很大的影响和帮助,但作为软件服务提供商,如何有效地提高代码的开发效率,缺少重要的指导性和帮助性的引导文件。
背景
最近上面要我很多项目要我做项目评估和报价,项目的需求基本上类似,大体包括如下内容:
1. 主体业务功能(比如仓库近销存)
2. 系统管理功能
主体业务功能大家从字面上可以理解,都是跟需求使用息息相关的,从程序员的角度来说,基本上都是需要自行设计和编写相关的代码,虽然整体思想和有些代码可以重用,但对于客户来说一些业务逻辑还是需要根据具体业务需求来进行设计和编写。
相反系统管理功能这一部分来说,很多处理基本上是类似和可以重用的。举例说明大家就能很清晰的理解了。
1. 系统登陆
2. 人员管理
3. 角色管理
4. 审批管理
5. 审批管理
6. 考勤管理
7. 权限管理
8. 产品类型管理
等
大家看到这些名词脑海中就基本上对这些系统管理功能有了一个雏形了,只要做到了增删改查加上一个权限判定就基本上满足客户需求了。
但是在评估报价的时候,我们就会发现主体业务功能的代码规模在整体上不超过50%,大家所熟悉的各项系统管理功能超过了一半的规模。在现阶段软件服务竞争大打价格战的情况下,客户也跟随这个趋势,可提供的预算也是大幅缩减,基本上预算仅仅只是主体业务功能所需的费用,对客户而言,系统管理功能都“应该”免费赠送或者是必须的。
那么,问题就出来了,系统管理功能这一部分如果能够接近零成本或者很少的成本作出来并提供给客户呢。
现状及分析
根据我多年从业经验来看,系统管理功能主要包括以下功能
1.有系统管理相关表存储各项管理数据
2.能通过画面对系统管理相关表的数据进行增删改查的操作
3.有一个菜单能进入各个系统管理画面
4.系统登陆界面(业务主体也需要)
5.有权限判定登陆用户是否有权限对系统管理画面进行操作
6.各个系统管理画面基本上保持一致的风格
对以上功能,我们可以分析得到
1. 菜单功能主体业务功能也是需要的
2. 系统登陆是整个系统必须的
3. 权限判定无处不在,主要是主体业务功能需要考虑的
因此,系统管理功能我们只需要做到
1. 有相应的DB设计
2. 有画面能进行增删改查操作
3. 保持统一风格
即可。
分析到这一步,对于程序员来说,他的作业内容就变成了:“设计人员,帮我把DB设计好,我对每一份表定义编写相同风格的可以实现增删改查的画面就好了~~”。
那么,我们把作业分割成
1. DB设计
2. 画面编写
作业分担上,DB设计我们可以把它交给设计人员,画面编写可以交给程序员。
在此,DB设计我们暂不考虑,我们主要考虑程序员的作业如何推进,更进一步来说,是如何有效的提高开发效率。
下面,我们做进一步分析。
首先,画面编写我们需要做哪些工作。作为画面,众所周知,一般包括以下要素(作业)
1. 画面布局定义,画面上的元素有哪些,我们需要明确
2. 画面的样式,宽度,高度,颜色,背景等
3. 客户端事件处理,保存按钮,双击事件,选择记录,删除等等
4. 客户端事件处理前参数验证
5. 客户端翻页处理
6. 后台事件处理(包括翻页)
7. 后台数据验证
8. 后台日志出力
9. 后台数据访问(增删改查)
然后,我们会发现所有的画面都是需要包括上面的要素的,而且风格都是统一的,那么要提高代码编写的效率,我们可以从此得出方向:
1. 编写一个画面,包含所有的要素,把该画面作为模板
2. 把该模板标准化
3. 以模板作为参照,统一生成所有的画面的模板化代码
4. 极少量的修改
5. 任务完成
分析到这里,大家就会问
1.“前面的1,2项我们都清楚,但怎么通过模板生成其它的画面啊,其它的画面的各个项目,涉及的表都是不同的…”,确实,能够想到这一点说明对如何编写代码是有一定基础的。
2.如果有人说“我知道了,我再写段代码,按照固定格式把它生成出来就可以了,但是表定义字段都是不同的,哪有怎么办呢?”,能提出这样的问题,说明大家的思考方向又往前进了一步。
3.如果有人说“我知道了,我可以查询DB,获取所有的表定义和字段,那么我就可以动态创建所有的画面了”,那么我会说,“恭喜你。你是一个善于利用经验善于开动头脑的优秀的开发人员”。
4.如果有人能够补充说:“确实可以做到,但是要是可以一次按照层次结构把代码都生成就好了,每次都要去写还是很麻烦的,要使把它做成一个工具,每次只需要修改下模板就好了”,那么我会说:“你很懒!但是你是一个富有想像力富有创造力的程序员!”