下面是我们在德裕软件已经从做这个QAM和QWeb教训。
我们的方法是将此视为使用框架或原型框架跨所有项目的重构工作。我们将每个项目中的框架代码分离成单独构建的东西,例如,src/myapp包含特定于应用程序的代码,src/qam包含框架本身。每个项目都有自己的应用程序专用代码副本,还有一个单独的项目,其中只包含框架本身的最新版本。当我们说要在构架一个特定项目中确定的东西,我们:该项目推广代码中
- 重构(基于我们都该应用程序,并使用该框架的所有其他人的理解);
- 重构项目中的代码从应用程序特定部分移动到框架部分;
- 将此更新应用于包含框架“主副本”的项目;
- 将来自该主副本的更改合并到其他也在使用框架的项目中;然后
- 在其他项目中重构使用框架的那部分而不是它们类似的特定于应用程序的代码。
这需要相当数量的纪律来快速调整变化。如果您刚完成开发新功能并立即将其引入其他项目,则集成非常简单。一段时间未更新的项目变得更难以使用最新版本的框架。如果您没有迅速将更改带入主副本,那么最终可能会在两个项目中的框架副本中产生不同的(并且更糟糕的是,相互冲突的)更改,并且合并可能会变得非常痛苦。在开始更改框架之前,您一定要将任何特定项目更新到最新版本的框架。
这样做需要一定量的工具等实际支持。您需要一种方式轻松快速地在框架的各种副本之间来回移动更改。我们有一个自定义工具来执行此操作(qu
),但是我想可以使用修订控制系统,特别是通过移动补丁工作的分布式控制系统来帮助完成此操作。
对每个应用程序有一个全面的测试套件有很大帮助;我不确定我会不想尝试这样做。
为了理智,保持变化很小是很重要的。再次,这都是合并和移动更新的难度。如果它总是很快,而且你最近一直在做的事情,那么事情很简单。这些变化是巨大的,而且自从你在这个框架中工作以来就变得越久,变得越困难。
我应该澄清一点,我不会为除我自己以外的任何人做这件事。我正在为不同的行业开发类似的应用程序,所以核心是90%相同,差异在于细节。 – 2009-05-18 01:39:50