再小的软件都会有三个阶段
- 源代码,比如说 hello.java
- 二进制,比如说 hello.class
- 运行时,比如说 java hello.class
如果是个人写点代码玩玩,那么无所谓了,最好的方法是用一个IDE,将三者统一起来,既省心也省力。但如果是一家公司,十多人的开发团队,并且同时开发多个功能相近的产品,那么管理源码和产品形态就很重要了。
比如说某某校园软件公司,准备开发三个产品,都是B/S架构
- 大学学生选课系统
- 校园教师办公系统(分为大学版本,高中版本,中学版本,小学版本,幼儿园版本)
- 校园学生考勤系统(分为大学版本,高中版本,中学版本,小学版本,幼儿园版本)
- 校园考试系统(分为大学版本,高中版本,中学版本)
最傻的办法是,把人拆开,复杂的产品多派几个人,简单的产品少派几个人,各自为营。如果用户一口气要买多个产品,就安装多套软件。但是聪明的办法是将人力按照技能分成几组,同时参与到不同的产品的开发当中,另外整个公司有统一的源码管理系统,每日构造系统,支持全产品安装和测试,对外销售时,可以对安装盘做裁剪,也支持按功能选择性安装。
为了支持上面的特性,这里不讨论技术细节,只是分析一下,要做到什么程度才能满足要求。
- 不同产品的源代码存在于不同的目录
- 不同产品的二进制文件存在于不同的目录
- 全产品安装,运行时,大部分进程都是为单个产品工作
- 多个产品之间可以有公用的二进制文件和公用的进程,但是这种公用应该是设计上面的有意的行为且有实际好处的,而不是迫于无奈或者说逼不得已。
上面四点中,最难的是第四点,很多软件开发到了一定阶段,随着人力更迭和各种应急行为,慢慢的越来越多的迫于无奈或者说逼不得已。好的项目,应该不断的梳理,每个开发阶段,既要根据市场需求新增功能和产品,也要不断将各种历史包袱清理掉。