一.背景
在系统开发过程中,尤其是涉及到系统集成性软件开发过程中,我们经常会碰到类似这样的场景:团队中已经有一个产品化的软件系统,但该软件系统需要按照项目型进行实施,而每个项目由于面向不同客户在某一些产品组件上可能都会有其一定的独特性。这些特定的产品组件往往涉及到系统集成,由于集成技术和方案的不同而需要进行二次开发,如下图所示:
从上面的组件图中我们可以看到在产品系统中,部分产品组件(图中为产品组件A和B)的运行将依赖于系统集成组件,而系统集成组件的实现将视项目而定,图中的项目实现1、2和3分别对应了三个不同客户项目的要求,在实施过程中,通过组合产品组件和不同项目线的系统集成组件实现达到系统集成的需求,这也是这类场景的典型需求,本文中我们称之为产品-项目型系统。
二.设计理念
针对产品-项目型系统开发,为每个项目都保存和维护一份完整的代码显然是低效和不符合产品化策略的。通常我们都会对涉及的不同项目系统集成部分进行抽象,如上图中的我们把系统集成组件梳理成一套集成接口,通过实现该套集成接口完成对不同项目可变部分的适配。产品-项目型系统设计的基本目标就是完成系统标准组件与可变组件之间的分离,但同时也要梳理一些其他因素,确保结构的完整性和高效性。
1. 产品组件标准化
对产品-项目型系统而言,首先需要确保各种产品组件的标准化,即产品组件的业务逻辑和流程对所有项目而言都应该是统一的。要做到产品组件的标准化,需要对系统业务有较高的抽象,通常都会涉及到抽取标准的流程、接口和数据交互格式。标准化的产品