目录
一、概述
架构师的一系列软件架构设计是用设计文档的形式呈现的。所以,在拆解一个个案例之前,我们先来了解一些关于软件设计文档的基础知识,这样你在学习后面的具体案例时,就能更加清楚并理解文档是基于什么方式来组织的了。
首先,设想这样一个场景:如果公司安排你做架构师,让你在项目开发前期进行软件架构设计,你该如何开展工作呢?如何输出你的工作成果?如何确定你的设计是否满足用户需求?你是否有把握最后交付的软件是满足要求的?是否有把握让团队每个工程师清楚自己的职责范围并有效地完成开发工作?
这些问题其实都是软件开发管理与技术架构的核心诉求,而架构师的核心工作就是做好软件设计,解决这些诉求。这些问题搞定了,软件的开发过程和结果也就都得到了保证。那如何实现这些诉求呢?我们的主要手段就是软件建模,以及将这些软件模型组织成一篇有价值的软件设计文档。
二、软件建模
2.1 软件建模的定义
所谓软件建模,就是为要开发的软件建造模型。
模型是对客观存在的抽象,例如著名的物理学公式E=mc,是质量与能量转换的物理规律的数学模型。除了物理学公式以外还有一些东西也是模型,比如地图是对地理空问的建模,机械装电子电路、建筑设计的各种图纸是对物理实体的建模。而软件,可以通过各种图进行建模。
一方面,我们要对领域问题和要设计的软件系统进行分析、设计、抽象;另一方面,我们根据抽象出来的模型进行开发,最终实现出一个软件系统。这就是软件开发的主要过程。而对领域问题和软件系统进行分析、设计和抽象的过程,就是软件建模设计。
2.2 软件建模的作用
软件系统庞大复杂,通过软件建模,我们可以抽象软件系统的主要特征和组成部分,梳理这些关键组成部分的关系。在软件开发过程中依照模型的约束进行开发,系统整体的格局和关系就会可控相关人员自始至终都能清晰了解软件的蓝图和当前的进展,不同的开发工程师会明确自己开发的模块和其他同事工作内容的关系与依赖,并按照这些模型开发代码。
2.3 软件建模解决的问题
那么,我们是根据什么进行软件建模的呢?要解答这个疑问你需要先知道在软件开发中有两个客观存在。
2.3.1 明确要解决的领域问题
一个客观存在是我们要解决的领域问题。比如我们要开发一个电子商务网站,那么客观的领域问题就是如何做生意,涉及:卖家如何管理商品,如何管理订单,如何服务用户;买家如何挑选商品如何下订单,如何支付等。对这些客观领域问题的抽象就涉及各功能及其关系、各种模型对象及其关系、各种业务处理流程。
2.3.2 最终开发出来的系统包含什么
另一个客观存在是最终开发出来的软件系统。软件系统要解的问题包括软件由哪些主要类组成,这些类如何组织成一个个的件,这些类和组件之间的依赖关系如何,运行期如何调用,需要部署多少台服务器,服务器之间如何通信等。
2.3.3 软件模型设计流程
而对这两个客观存在进行抽象化处理的手段就是软件模型图,设计流程所下图所示: