进行大型的工程和进行小型的工程是不同的,其原因有很多种。这其中的一个是,在你进行大型工程的时候,你常常要处理叫作程序包(package)的大段原有代码,它们需要被放到一起。在小型工程里,有的时候你可以为所有的东西都创建自己的解决方案。但是对于大型项目而言,你购买一部分解决方案并将它们放在一起的机会会更多。
船+车=鸭子
如果你从来都没有去过威斯康星峡谷(Wisconsin Dells),那么你就无法领会一些东西。除了它的自然美景外,老实说,它的怪异我还从来都没有在别的地方体验过。你处在这样一个地方,即小片的陆地隔离出了无数的湖区,如果想要穿过去这篇地带,你就需要一个像汽车也像船一样工作的东西。
你需要能够穿过这片陆地,并能够在水上行进,直到通过。但是,不论是汽车还是船都无法(单独)完成这个任务。这就是为什么在威斯康星峡谷有一种被亲切地叫做“鸭子(
Ducks)”的交通工具。这个发明能够像汽车一样在地面行驶,也能够像船一样在水上行驶。
这种交通工具让人惊奇的地方是,大多数人都认为汽车和船是无法成功地组合到一起的,但是它的确就是这样一个组合体。这两种交通工具的技术融合到一起与开发人员将两个不同的系统集成到一起是类似的。
非常不同的代码段
进行大型项目的人所要面对的一个挑战是:解决同一个问题的两种方法常常是由不同的代码实现的,而这些不同的方法还需要被集成到一起。一个程序包可能要在Web Sphere服务器上运行
J2EE,而另一个程序包可能要在微软IIS6服务器上运行ASP.NET。这两个解决方案都具有很好的特性,能够满足一定数量用户的大多数要求,但是问题是如何同时利用两个在代码上不兼容的大型工具包,并让两者共同工作。
从在某些方面上讲,这个编程任务同将汽车和船做到一起,以便你能够自由地同时在陆地和水面上行驶一样困难。在这两种情况下,工程需要设计决定在两者的最佳特性之间作出妥协,从而使二者能够被集成到一个解决方案里来。在编程这种情况下,找到两段不同代码的折衷点是很困难的,因为两种(或者更多)解决方案肯定会在某些方面发生重叠。代码的每一段都会解决同一个问题——总是用不同的方式。在其他的情况下,代码段之间可能会出现任何代码段都没有能够涉及到的空档。
解决的方法是确定这些代码段中的哪一个会被修改,以便支持或者接受完成任务的其他方式。可以编写转换器代码从而将产品中的一个和另一个捆绑在一起。要确定这些集成点在哪里不总是显而易见的,决定的作出往往还要依赖很多因素。