“一个软件架构是一个软件系统在其操作的某个阶段的运行时(run-time) 元素的抽象。一个系统可能由很多层抽象和很多个操作阶段组成,每个抽象和操作阶段都有自己的软件架构。”

根据Fielding博士的解释,软件架构可以从纵向和横向两方面来划分。架构的核心是抽象原则,即通过封装来隐藏系统运行时表现功能的具体实现细节或不同模块间组合与协调的细节。从横向上来看,整个系统可以根据其职责被划分为各个不同的层次,如数据访问层和业务逻辑层等,这里对于每一层的架构可以被描述为提供给同层的其他元素的抽象接口,以及对上层架构的具体化描述,而不是另一个独立的架构层次。比如数据访问层的Add接口应该被理解为进一步解释业务逻辑层Add接口在系统运行时表现的行为,而不是被看成一个独立的数据库添加操作。另一方面,从纵向上来看,系统架构可以根据整个系统的运作阶段切片,也就是说位于不同层次的接口集合可以被用来描述系统运行时某一个特定阶段的行为。不管从横向还是纵向划分,架构都体现为一种对系统运行时功能的精确表述,向下(实现该架构的开发人员)它是一份技术上的规范文档,向上(客户)它可以是一种有点商务味道的契约与准则。

尽管以前自己理解在表述方式上和Fielding博士的论述大体一致,但观念上似乎有着不小的差距。软件架构所做的应该仅仅是对于系统功能的描述,它与具体的代码设计,即软件结构,应当被区别对待。后者作为设计时(design-time)的代码设计,为实现运行时的功能描述服务,所以从这个角度来看开始编码以后的设计已经成为一种实现,而不是从一个宏观的角度去看整个系统。过去我所做的设计似乎都有这样的问题,忽略了真正的软件架构,而直接开始了对软件结构的设计和组织。对于软件需要体现的功能,我们放给了需求人员去思考,而这部分内容恰恰是软件架构的核心。对于软件结构设计的目的在于通过组织代码来实现系统的模块化,以及各个功能组件的可复用性与灵活性,所以一旦开始关注这部分内容,代码的组织就会变成设计阶段的主导,而系统的运行时特性便沦为调试阶段作为正确结果与之进行比对的一份参照。虽然将静态源代码结构的设计作为主导会产生出可复用的功能组件,但是该组件很可能过多的考虑了某些当前系统并不需要的行为。比如说客户需要设计一个分布式留言板,让公司内部的员工可以像贴便条一样分享自己的经验。如果直接对软件结构设计我们很可能会构建一个具有Add, Edit, Remove, GetById, GetBySubject, GetByEmployee等方法的MessageBoard实体,但是其中的Remove和GetById操作真的会被作为系统功能展现给用户吗?是的,他们肯定是有价值的,但其价值登场的时间是在具体的模块开发过程中而不是在软件架构的过程中。一开始便考虑此类接口有两个缺点,其一是设计人员可能花费更多的时间去思考一些最终用户并不关心的功能;二是这些过多的考虑很可能让开发人员在潜意识里降低用户实际需求的优先级,而醉心于编码之中。归根到底,技术服务的是需求,所以需求设计和架构设计应该同时提出,而不是一个先需求后架构的流程,这样才能让后面的代码结构设计有的放矢,不做多余的工作,加速项目迭代周期。

转载于:https://www.cnblogs.com/Nyyrikki/archive/2009/06/11/1501599.html

Fielding 博士论文阅读笔记(一)相关推荐

  1. 点云配准论文阅读笔记--3d-dnt博士论文

    目录 点云配准系列 本文内容 摘要 chapter1 introduction 1.1 Contributions 1.2 outline chapter2 常用概念 2.1 点.位姿 2.2 旋转 ...

  2. Fielding博士论文导读----第6章

    REST其实并不是什么新的东西,从Web的历史来说,甚至可以说非常古老.Fielding和他的协议团队自从1994年以来就在内部使用REST来指导现代Web架构协议的创作.不过Fielding直到20 ...

  3. Fielding博士论文导读----第6章 1

    REST其实并不是什么新的东西,从Web的历史来说,甚至可以说非常古老.Fielding和他的协议团队自从1994年以来就在内部使用REST来指导现代Web架构协议的创作.不过Fielding直到20 ...

  4. 点云配准论文阅读笔记--(4PCS)4-Points Congruent Sets for Robust Pairwise Surface Registration

    目录 点云配准系列 写在前面 Abstract摘要 1 Introduction引言 2 Background研究背景 RANSAC Randomized Alignment 3 Approximat ...

  5. 点云配准论文阅读笔记--Comparing ICP variants on real-world data sets

    目录 写在前面 点云配准系列 摘要 1引言(Introduction) 2 相关研究(Related work) 3方法( Method) 3.1输入数据的敏感性 3.2评价指标 3.3协议 4 模块 ...

  6. 观沈向洋博士论文阅读技巧有感

    观沈向洋博士论文阅读技巧有感 前述 论文阅读技巧 快速浏览 标题 摘要 引言 批判性阅读 创造性阅读 总结 参考 前述 5月14日,沈向洋博士在全球创新学院做了一堂公开课<You are how ...

  7. 全卷积(FCN)论文阅读笔记:Fully Convolutional Networks for Semantic Segmentation

    论文阅读笔记:Fully Convolutional Networks forSemantic Segmentation 这是CVPR 2015拿到best paper候选的论文. 论文下载地址:Fu ...

  8. DnCNN论文阅读笔记【MATLAB】

    DnCNN论文阅读笔记 论文信息: 论文代码:https://github.com/cszn/DnCNN Abstract 提出网络:DnCNNs 关键技术: Residual learning an ...

  9. Learning Multiview 3D point Cloud Registration论文阅读笔记

    Learning multiview 3D point cloud registration Abstract 提出了一种全新的,端到端的,可学习的多视角三维点云配准算法. 多视角配准往往需要两个阶段 ...

最新文章

  1. 基于投票方式的机器人装配姿态估计
  2. Nature:1000种植物的测序揭示10亿年来的进化
  3. 现金支付没落?澳大利亚一年内移除数百台ATM机
  4. 微电子所在阻变存储器研究领域取得新进展
  5. USB转串口 FT232/PL2303/CH340 驱动以及使用体会
  6. JavaScript中闭包实现的私有属性的getter()和setter()方法
  7. netty5.0通过LineBasedFrameDecoder和StringDecoder解决粘包
  8. SQL Server 2012安装图解
  9. Android之可伸缩的皮筋效果(贝塞尔曲线)的介绍
  10. 1.2 - 列表练习题
  11. 编写程序,定义一个方法,能够判断一个1~9999之间的数是否是回文数。
  12. oracle 不认exp指令,更改oracle字符集导致exp命令出错(解决方法)
  13. 关于MOSS列表库新建列表项前的!New标识
  14. SaaS 正在 Rails 化
  15. matlab封闭传递包求解,梯度下降和封闭形式的解决方案 - MATLAB中不同的假设线...
  16. [转] 面试70问经典回答
  17. 【车牌识别】基于matlab GUI汽车出入库收费系统(带面板)【含Matlab源码 735期】
  18. 真西游记java,原来《西游记》原著真的很吓人,我们都被86版西游记骗了?
  19. 指数分布在生活中的应用_概率论中指数分布的应用
  20. python-onvif 库踩坑

热门文章

  1. Flex 学习之二十 Form的使用
  2. Cartoon Animator 4 for Mac(二维动画软件)
  3. 【教学类-19-03】20221127《ABBABB式-规律排序-A4竖版2份》(中班)
  4. QNX----I2C驱动框架
  5. 2022-2028年全球及中国多功能示波器行业投资前景分析
  6. JavaScript的发展史及其应用领域
  7. Tree Stem Diameter Estimation from Mobile Laser Scanning Using Line-Wise Intensity-Based Clustering
  8. macbook禁用键盘_如何禁用Macbook Pro的内置键盘
  9. 2019双十一购物测试
  10. 免费获取快递物流信息(快递100)