架构设计是需求分析到软件实现的桥梁,也是决定软件质量的关键。编制架构设计说明书是开发人员向架构师转变必定会经历的过程。在架构师整个的成长过程中,必定会经历编制架构设计说明书、评审架构设计说明书以及根据业务需求分析设计系统架构的三个过程。作为一个架构师,我想尝试一下根据这三个过程对不同能力需要,写一次系列文章,包括《架构设计三部曲之如何写架构设计说明书》、《架构设计三部曲之如何评审架构设计说明书》以及《架构设计三部曲之如何做架构设计》,一来可以帮助自己整理思路,重新审视架构设计,二来也可以与大家分享心得,听取大家的意见,共同进步。本篇属于系列中的第一篇。

那么到底如何编写架构设计说明书?该说明书应该包括哪些方面的内容呢?我们知道,架构设计说明书是阐述系统架构具体内容的,根据我之前的文章《我的架构观-架构未来的发展》我们明白架构的本质是呈现三大能力:即系统如何面向最终用户提供支撑能力、如何面向外部系统提供交互能力、如何面向企业数据提供处理能力。因此从这个角度看,对架构设计说明书的章节的设置及章节内容安排应该要能说明清楚系统架构到底是如何呈现这三种能力的,让我们逐个分析:

系统如何面向最终用户提供支撑能力:这一点是要从系统自身的能力来看,即本系统到底应该具备哪些功能,各功能间如何协作以满足支撑最终用户的使用,其实就是要讲系统的功能架构或逻辑架构,回答系统从功能粒度上划分了几个功能模块或子系统,各模块或子系统之间的内部接口关系如何等问题。当然还有一个需要考虑的问题,在纵向维度上,随着架构设计理念的不断发展, 逻辑架构模型从最初的展示-数据两层模型,到展示-逻辑-数据(所谓的MVC)三层模型,甚至到展示-调用接口-逻辑-数据接口-数据五层模型,不同层次表明系统内部设计的精细程度,因此在逻辑架构设计中也需要针对实际情况加上这种分层设计的内容。尤其是对于powser/Server架构模式的MIS类系统,这种层次更为常见。另外,用户相对于机器来说对系统提供的能力是有个人喜好要求的,不仅要求系统能提供支撑,而且还要更加稳定的、更方便的、灵活的、快速的等提供,这就需要在架构设计说明书中增加所谓非功能性的设计,即需要描述系统的性能、高可用、可扩展性、可维护、安全性、可移植性等。

系统如何面向外部系统提供交互能力:这一点是要把系统当成一个完整的整体,阐述它如何与外部的系统发生调用关系,外部系统为它提供了哪些开放接口,它又为外部系统提供了哪些外部接口和能力,同时,在这种相互的调用关系中它处于整个IT架构的何种位置,这其实就是在说系统的整体架构。另外,如果我们把操作系统和硬件服务器也当成一类特殊的外部系统的话,就需要说明系统如何基于操作系统利用硬件服务器来提供计算、存储、网络等能力,系统如何把自己拆分成不同的部分以便部署在服务器上,这其实说的是部署架构。

如何面向企业数据提供处理能力:信息系统的原始驱动力就是人们需要借助计算机的强大计算能力来辅助处理大量数据,从而形成可理解的信息,并最终形成可掌握的知识。因此数据处理是系统的根本目的,至关重要,在架构设计说明书中需要单独描述系统对数据的处理能力,即我们所谓的系统数据架构。这还是可以从对外和对内两个角度来看,对外即需要说明本系统处理的数据在整个企业数据流中所处的位置,与相关的上下游数据之间的关系,本系统需要从数据上游的外部系统获取哪些数据?又需要为数据下游的系统提供哪些数据;对内需要说明本系统根据业务需求设计了哪些关键数据表,它们之间是何种主外键关系,是否需要从外部导入数据为系统做数据初始化等。当然还有对数据管理的描述,包括如何做数据冗余设计,备份机制,数据安全管理机制等。

好,分析完这三种能力,我们几乎就找出了架构设计说明书中应该包括的内容,包括整体架构、逻辑架构、数据架构、部署架构、内外部接口、非功能性设计等,如果纯把架构设计作为理论研究,有这些也就够了。但是现实中我们编制架构设计说明书毕竟是用来指导我们后续系统开发的,是需要真正落地实施的,因此就会涉及使用何种技术实现?有哪些关键技术?用到了何种成熟或开源技术组件?复用了哪些之前的技术成果?等等,同时也包括对技术风险的考虑与预防措施。所有这些就是技术架构的内容。

综上,我们就可以得到一份完整的架构设计说明书的结构及应该包含的内容,其大致章节应该是这样的:

文档概述:包含项目背景、项目目标、文档版本信息、目标读者、参考文档、名词解释之类的一般文档都会有的章节;

整体架构:主要从整个IT层描述系统所处的位置,与周边关联系统之间的调用关系;

逻辑架构:系统内部功能模块的划分以及各模块功能介绍、相互之间的关系表述;

接口设计:包括系统间的接口设计以及内部功能模块之间的接口设计;

数据架构:本系统与上下游系统间的数据流关系,以及本系统关键数据表设计、数据管理策略等;

技术架构:实施此架构需要用到哪些技术能力,有哪些复用能力及风险;

部署架构:系统如何部署,网络拓扑上有何要求,对硬件服务器有何要求,需要几台,是否需要优化服务器参数;

非功能性设计:性能、高可用、可扩展性、可维护、安全性、可移植性等。

其他说明:如特别约束条件、风险考虑、进度要求、政策限制、环境影响等;

以上,便是我认为一份较为完整的架构设计说明书应该包括的内容了。

架构设计之如何写架构设计说明书相关推荐

  1. 图案设计灵感怎么写_设计的灵感来源

    一.设计的灵感来源 本系列的灵感来源于林华的 <黑白画> , 我脑海中就有闪过黑白画这一应用几乎和人类 文明同样的古老, 我们现今发现的古代遗址中大量的装饰品. 陶器等就有许多堪称 &qu ...

  2. 软考·系统架构师论文——论基于架构的软件设计方法及应用

    文章目录 说明 摘要 过渡 项目背景 论点理论+实践 结尾 说明 1.[摘要 300~330字] ① 项目介绍:时间.项目名.项目主要功能简述.作者角色及工作内容 ② 项目技术简介:正文理论/分论点的 ...

  3. 朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素

    朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素 [下载文本PDF进行阅读] 本文我会来说说我认为架构评审中应该看的一些点,以及我写设计文档的一些心得.助你在架构评审中过五关斩六将,助 ...

  4. 走向ASP.NET架构设计-第六章-服务层设计(中篇)

    走向ASP.NET架构设计-第六章-服务层设计(中篇) 前言:上一篇文章介绍了一些服务层的基本知识,而且也简要的介绍了SOA的有关知识,本篇主要是介绍在服务层可以采用的一些模式.  本篇议题如下: F ...

  5. [短彩信]C#短彩信模块开发设计(1)——架构

    准备从以下几个方面简单的谈谈短彩信模块的实现: [短彩信]C#短彩信模块开发设计(1)--架构(http://www.cnblogs.com/CopyPaster/archive/2012/12/07 ...

  6. 走向.NET架构设计—第三章—分层设计,初涉架构

    走向.NET架构设计-分层设计,初涉架构(前篇) 前言:本篇不打算接着上一篇来,这没有关系,以为内他们之间的联系不大,以后我再补上.因为之前一直在谈论设计,也谈了一些TDD的东西,大家反应觉得讲述的还 ...

  7. 云时代架构阅读笔记十五——架构设计思维(一)

    对于架构设计人们已经提出了许多方法,分类为:工件驱动的方法:用例驱动的法:模式驱动的方法:领域驱动的方法.一个经典的架构设计过程模型,沿用了RUP中迭代增量的思想,由分析.描述.选择.构造和组合5个阶 ...

  8. 周梁伟:聊天室架构 如何跳出传统思维来设计?

    周梁伟 现任网易云信 IM云服务器端开发负责人,浙江大学计算机学院硕士.2011年加入网易,先后担任网易后台技术中心与网易大数据平台资深开发工程师,负责即时通讯领域的产品开发与应用服务器与大数据领域战 ...

  9. .NET 分布式架构开发实战之二 草稿设计

    前言: 本篇之所以称为草稿设计,是因为设计的都是在纸上完成的.反映了一个思考的过程. 本篇的议题如下: 1) 第一个数据层草图的提出 2) 对数据访问层的思考 3) 第二个数据层草图的提出 1.数据层 ...

最新文章

  1. 自动微分到底是什么?这里有一份自我简述
  2. 超出父控件怎么才能点击
  3. stm32 DMA 配置 串口程序
  4. Shiro+springboot+mybatis(md5+salt+散列)认证与授权-01
  5. 仿照微信的效果,实现了一个支持多选、选原图和视频的图片选择器,适配了iOS6-10系统,3行代码即可集成....
  6. 推销员(codevs 5126)
  7. 2020 年,开启现代库的基建学习 —— 从项目演进看前端工程化发展
  8. Linux下安装流量监控工具iftop
  9. 基于Unity官方素材开发的3D二人沙漠坦克大战
  10. 专利:专利说明书的主要组成部分
  11. oracle实验7 pl/sql编程基础
  12. OV5640时钟理解与端口理解(一)
  13. Excel批量导出当前工作表所有图片的快捷操作
  14. 站长天下:buyren网上购物论坛的发展
  15. EWSTM8系列教程03_主窗口、工具栏的概述
  16. jackson转换json大写_Jackson-Java bean到JSON字符串:大写变量在JSON中转换为小写
  17. 4G网速变慢?工信部回应:近期全国4G网速整体保持稳定
  18. Git 爬坑 - 建立远程仓库
  19. 回文是指正读反读均相同的字符序列;如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符序列是否是回文。
  20. 【UEditor】百度UE富文本自定义按钮添加文本

热门文章

  1. 错误: 找不到或无法加载主类 iamdev.me.ytds.YTDSApplication
  2. EasyUI Messager的alert基本使用
  3. 1.10 Illustrator网格的使用 [Illustrator CC教程]
  4. Python字典:一段英文获取单词个数并排序
  5. “难产”10个月的腾讯智能音箱终于面世,9420唤醒词你喜欢吗?
  6. nexus+7+android+5.0++wifi+代理,二代Nexus 7获Android 5.0.2系统更新
  7. sql存储过程语法详解
  8. CISCO3550配置
  9. 基于javaweb+springboot的物流快递在线寄查快递系统(java+SpringBoot+FreeMarker+Mysql)
  10. Go Web学习笔记(Gin和Gorm)