软件架构师必读!什么是设计?如何进行设计?

在质量的约束之下,软件架构如何进行设计?关键的问题是什么是设计,如何进行设计呢?对这个命题的不同理解,会形成截然不同的方法论。

1、什么是设计

设计是技术与文化的融合。

设计的目的是创作事物,设计先于事物出现且与之相关,但又有所区别。设计需要新思想,而新思想来自于将一个领域中的领悟联系并应用到另一个领域中,历经若干次这样的经历而有所悟,脑海里自然就孕育出了“新思想”。因此,跨学科的灵感和锻炼是设计之根本。

设计是一种对话,它不仅仅是与利益相关方的对话,也是自己与自己的对话。

设计是一种思维活动,设计的魅力在于破解难题,通过直面问题的挑战,以及对相应解决方案的仔细推敲,才可能设计出真正有灵性的产品。

1)设计不具普遍性

软件设计很少具有普遍性,不同的目标需要不同的设计来支持。 一个适用于所有应用”的设计很少会成功。举例来说,一个大型应用领域的系统,其共同目标是提高质量和降低成本,而一个快速活动的业务领域的系统,其目标则通常是进入市场的时间及可接受的低风险。

一个旨在降低成本的设计,和一个旨在缩短进入市场时间的设计,或者与一个旨在最大化业务敏捷性的设计是不一样的。这就需要早期阐明目标,并且在对组织业务目标和可行技术的不断变化的回应中进行发展。好的设计在这种变化中应该具有足够的适应力。

2)做出权衡

所谓软件设计,本质上就是在质量、成本、时间以及其它各种因素之间做出权衡。

在设计过程中应该向你、经理人员、开发人员以及其他利益相关者,清楚阐明采用某种解决方案的原因,包括其中做出的权衡。例如:为了减少响应时间,是不是牺牲了锁定和同步的范围?

为了保证性能,是不是牺牲了数据加密的级别?这样一来系统是不是还足够安全?

3)设计决策

整个设计过程就是一个发现问题、权衡解决方案、作出决定的过程,由下图所示。

其过程中包括:

目标:设计目的是什么

必要条件:和目标相关的是一组必要条件或者次要目标

约束:限制条件,包括资源、时间、技术以及其它方面的约束。在很多情况下,约束是创作的朋友,由于约束的存在,才迫使我们采用创新方法。

资源、预算及其分配:最常见的是成本预算,内存或带宽的用量等。

设计树:设计师形成设计决策。然后,在设计空间中又形成另一决策。在每一个节点处,他都可以选取一条或多条路径,因此设计的过程可以认为是一种对于以树型结构组织的设计空间的系统化探索。