架构设计的输入
从前面的几章,商业需求规格(Marketing负责,比较抽象但是更接近用户)----》系统需求规格(R&D负责,相比于商业需求规格更细节,偏向于研发工程师),当然由于软件的特殊性,有些企业会将系统需求规格中的软件部分单独分离出来形成独立的---》软件需求规格。综上,层次化的需求规格是需求分解并逐步细化过程,是将用户需求逐步转化成设计输入的过程。软件需求规格作为架构设计的输入应该具备缜密的逻辑性,这种逻辑型可以用“树”的形式进行表征,树的根节点是软件需求规格,一级子节点表示应该首先被实现的需求,子节点之间是独立的模块,子节点与父节点是一种依赖,以此类推。通过这种树状图,需求被可视化了。
架构设计和需求是对同一事物的两种表达形式,两者紧密关联,任何一个发生改变都会彼此影响,因此架构设计一定不能脱离需求,架构设计要服务于需求,服务于需求的变更。
架构设计的原则
1、着眼当下
2、立足长远
3、与人交流
对于着眼当下,不难理解,优雅的解决掉手头的问题。那么要做到立足长远,前提你要心里有数,未来会怎样?对于未来会做怎么样的改变的陈述,一定不是需求规格的内容,因为需求是反映当下,它是客观的,实际的。那么这就需要架构设计者根据自己的经验、与人交流来进行来弥补,使得设计能够非常好的应对潜在的可能的变化。正所谓“预则立不预则废”,这个也是编程过程中一直提倡的“编程需要防御性”。世界上并不缺乏解决当下问题的好手,而缺的是能把握未来趋势的人。
架构设计的目标
1、正确性
2、健壮性
3、灵活性、可伸缩性
4、可维护性
软件设计很难,因为既有来自问题域的挑战,又有上述软件自身应该具备的约束。有太多的权衡利弊,所以设计没有完美,有的只是不断的改进,但前提是一定要留出充足的空间。