回到首页

输入关键词,多个关键词用空格分隔。

← 软件架构与设计 · 系列目录

软件架构与设计 习题课 3 从不同视角描述系统

约 3 分钟
本页目录

这一次的作业,会在之前的基础上,通过不同的观察角度,更加科学系统来展示整个软件的架构和各个部分的关系。老师给出了一篇论文,这里也会简单总结下。


老师给出的论文叫做 Architectural Blueprints—The “4+1” View Model of Software Architecture,实话说,没啥用。作者用若干个例子来说明了我们需要从多个角度来审视和描述系统,整个思路基本上用下面这张图就可以概括:

总体设计

因为论文是20多年前的,所以很多当时比较『新』的概念,其实在现在的软件开发中早已成为平常,甚至也已经过时了。至少在目前风口浪尖的移动互联网,等这些乱七八糟的文档画完,项目估计都黄了。更有意思的是,这篇论文和我们的作业并没有太大关系(你™是在逗我?)

这里补充一段自己在飞机上看时写的批注:20 年前的方法论,在很多尚未成熟的领域(比如移动互联网)不适用,因为需求本身不是明确的,而是要靠试错和挖掘的。而且需要撰写的文档太多,会导致启动/转向缓慢,并且保证文档实时更新也是难题,而不更新的文档,其实是毫无意义的。文档应当是开发的产出,反过来,开发不应是文档的产出。但是这种分层和切片的思想,是很有用的。不过在这个具体的场景中,对于已经理解了整个系统的人,这样写会更清晰,但是对于不理解的人来说,还是难以有全局概念(但是比传统的仍旧好一些)。就我个人的感觉,还是快速原型+迭代更新更有效。

那么现在我们来看看,这次的作业是要干嘛。简单来说,就是利用这种多个视角的方式来继续完成之前的设计,有以下角度:

  • 功能视图:各个模块图,包括接口和依赖
    • 系统中主要的功能模块是哪些
    • 使用简化版的 UML 2.0 来描述
  • 信息视图:展示 schema,数据模型和数据流,用状态机图来描述系统的信息模型
  • 部署视图:软件的组件需要在哪里部署和运行
  • 开发视图:主要的软件包是什么
  • 并行视图:在不同地方运行时,系统是如何运行的。你会如何保证数据一致性?

以上是作业的第一部分(这句话的意思是,还有另外一部分,不过先从这里开始),下面是我的设计,但是用来描述的文字就不翻译了,就算是抛砖引玉,大家自己思考下。

Function View

3.1functionvie

Information View

3.1informationvie

Concurrency View

3.1concurrencyvie

Deployment View

3.1deploymentvie

Development View

3.1developmentvie

接下来的一部分是根据之前的设计,把每个架构风格的各个部件列举出来,如:

  • 组件
  • 连接器
  • 数据元素
  • 行为
  • 需要注意的事项

基本上对着 PPT 改一下就好,这里也就不赘述了。

说了这么多,就是想要表达,在一门以实践为重的学科里,天天学理论,是有多™蛋疼。

本课完。

相关文章