我们身处软件工业时代这个令人振奋的时代,却面临着遗留系统这个令人尴尬的难题。事情总是这样的:软件最开初开发的时候总是非常清晰,清晰的需求、清晰的设计、清晰的代码,清晰的程序结构让人赏心悦目,甚至有些自我陶醉。随后,软件开始需求变更,每变更一次软件的质量就下降一次。这样,软件经过数次的变更以后,需求文档变得模糊不设计思路跟不上更的脚步,程序代码则随业务逻辑复杂臃肿不堪,程序员开开发工作得不再是一种乐趣。时间的推移,经过数年、十次的需求更,情况变得越越糟,软件质量像滚雪球一样直线下降。难道需求变更就是软件变糟的罪恶之源吗?

然而这不是真相,这是一个真实的谎言。如果我们不明白软件发展的规律,我们是不可能明白其背后的真相。件,特是管理件,其实质对真实世界的模。我过对真实世界的模实现计算机的信息化管理,提高我的生效率。然而,真实的世界复杂而多的,我们认识世界却是一简单复杂循序渐进程,是一无法改的客观规律。因此,毫无疑,遵循着这样观规律,我开发过程必然也是一简单复杂循序渐进程。

最初,我们开发的是一个对真实世界最简单、最主要、最核心部分的模。因为简单,我的思路晰而明了。但是,我件不能永只是模那些最简单、最主要、最核心的部分。我的客在使用件的程中,如果遇到那些不那么简单、不那主要、不那核心的情况时,我件就无法理了,是客如何不能接受的。因此,但件的第一版本交付客以后,客的需求就变更

的需求永会脱真实世界,也就是真实世界不存在的事物、象、系永都不可能出件需求中。但是,真实世界的事物、规则与联不是那简单与清晰的。着我对它得越致,程序的业务逻辑开得复杂而不再那么清晰、易于理解,就是量下降最关键因。

任何一个软件的设计与软件的复杂度有密切的系。简单软件有简单软件的设计,复杂软件有复杂软件的设计,它们是不一样的。但是,软件的发展规律却是一个由简单软件转变为复杂软件的过程。正因为如此,我们最初的设计通常是简单软件的设计,然而随着软件复杂度的提升,我们是否调整过我们的设计,向复杂软件的设计过渡呢?非常遗憾的是,通常情况却不是这样,起初进行简单软件设计以后,虽然软件在越来越复杂,但开发人员没有通过重构对软件结构进行调整,而是就着简单软件的设计,添加复杂的程序逻辑。这才是所有遗留系统面临的真正问题:不是因为软件需求在变更,而是因为当需求变更以后,软件业务逻辑在变得越来越复杂时,我们没有通过系统重构调整原有的系统结构,以适应新的需求。正因为如此,我们的遗留系统将变得越来越难懂,越来越难于维护,任何一项变更都成本巨大。

说了这么多,你也许还没有什么感觉。来说吧,客户资料是多系都必记录的重要信息。起初,我程序简单,客户资料只记录了一些简单的信息,如客、地址、电话等等,但着程序复杂度的增加,客户资复杂。比如,起初“地址”字段就仅仅需要一字符串就可以了,但着需求的更,它开始有了省、城市、地、街道等信息。还会编码、所、派出所等信息。起初增加一个两个字段们还可以在“客信息表”里合一下,但后要及时调整我设计地址提取出来单独形成一“地址信息表”。如果不及予以整,“客信息表臃肿,由10来个字段,5080、上100

信息表且如此,业务操作更是如此。起初的业务操作是如此的简单而明了,以至于我不需要花太多的就可以将它们描述楚。比如票操作,最初的需求就是具的票据信息取出,保存,并统计出本月票量及金这样个简单操作,设计成一个简单业务类”合情合理。但后的业务逻辑变得越复杂,我检查是否存在、票人是否有限、票据是否存,等等。起初的票方式只有一,但着非正常票的加入,票方式不再一,而统计方式也业务的不增加,件代模也在生着化。如果这时不及时调整我设计,而是所有的程序都硬塞业务类”,那程序量必然退化。业务类”由原有的十行,激增到百行,甚至上千行。这时的代码将难阅读维护它将变成一痛苦,毫无趣可言。

对这样状况,我们应当怎样走出困境呢?毫无疑,就是重件的重票前的校验真业务类它们是否应当被提取出,解耦成一的校验类。正常非正常应该写在一起?是否我们应当业务类”抽象成接口,以及正常非正常票的实现类就是我大家的良方:当软件因需求更而渐渐退化时,件重改善我结构,使之重新适应软件需求的化。(续)