系统设计笔记

在不稳定的需求面前,尽量保持灵活性。

  多年的经验告诉我,国内软件开发的需求是极其不稳定的。比如说,原先某个字段是必填,后来又变成可选。又比如说原来实体类A和实体类B是一对多关联的,后来又变成多对多。

虽然很多开发人员都非常反感这种需求变化,也包括我自己,但是不得不承认,这是现状,是一种常态,我们要去接受他。造成这种结果的原因有很多,由于篇幅有限,在这里我就不详细展开了。

  还记得在某本书里面看到过,软件开发需要考虑扩展性,要不是仅仅为当前功能而实现。当时没有太多感触,现在细想起来,的确非常有道理。看样子很多道理都需要亲身经历过才会有深刻体会。

不是道理不够深刻,而是你没有经历过。那么考虑扩展性的优势何在呢?

  第一,适应需求变化更敏捷。这里用敏捷这个词来形容扩展性,是非常贴切的。很多系统就像意大利面条一团,扯也扯不开。在这样的系统里面,你想增加一个新的功能或者一个新的特性,需要付出很大的努力,而结果往往未尽如人意。而对于考虑了扩展性的系统来说,只需要很少的改动便能增加一个新的功能或者特性,感觉非常敏捷。

  第二,更少的Bug。因为软件开发不是一项孤立的工作,代码之间都是有依赖关系的,没有代码是能够孤立存在的。我们习惯于垂直划分系统来进行开发。这种设计方法有很多优点,比如开发人员之间的依赖比较少,大家可以并行开发。但是这个方法的缺点也是非常明显的,代码重复率高。为什么这么说呢?因为越上层的代码依赖越多,但是由于代码是垂直拆分的,就意味着所有代码都需要开发人员自己写,有个戏谑的说法叫“一揽子工程”。由于事先没有约定,很多开发人员都实现了同样的方法,这就造成了重复代码。

当然缺点也是有的。

  第一,需要更多的开发测试时间

  第二,需要更强的专业技能

原文地址:https://www.cnblogs.com/mkxzy/p/7058305.html