“一个软件架构是一个软件系统在其操作的某个阶段的运行时(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. php mysql 性能测试工具_高性能MySQL–MySQL基准测试
  2. json和对象、list互转
  3. Curator实现分布式锁的基本原理-LockInternals.attemptLock
  4. linux配置gprs modem
  5. MogDB大对象LargeObject存取测试
  6. 【MySQL】MySQL 8不支持查询缓存
  7. 【python】字典与集合的练习题
  8. 多线程 并发编程(一)
  9. Android 组件系列-----Activity生命周期
  10. iOS关于iPhone6和iPhone6 Plus的屏幕适配问题
  11. VS C#/C++ 诊断工具找回 诊断工具打开 诊断工具发现
  12. linux sdb目录,linux – / dev / sdb:没有这样的文件或目录(但是/ dev / sdb1等存在)...
  13. CUID卡写入错误数据被锁死——入坑NFC的一段经历
  14. C语言基础项目:200 行代码实现贪吃蛇,思路+源码详解
  15. Android 杂七杂八记录
  16. 【转】斐讯K2刷华硕固件教程
  17. Android中复杂日历控件,CalenderView-一个优雅、高度自定义、性能高效的Android日历控件...
  18. 【ftp上传文件失败】put: Access failed: 553 Could not create file. (passwd)(接详细配置1问题解决)
  19. 用ZeroTier搭建属于自己的虚拟局域网(VLAN)
  20. 一个漏洞潜伏54年?谁才是“潜伏界”最强王者

热门文章

  1. HTML超文本标记语言详解
  2. 知+是什么?知+如何开通?如何用知+在知乎做推广?知+广告怎么投放?知+信息流投放如何优化内容?
  3. 推荐吴军的著作《文明之光》
  4. 【KDD 2019】Is a Single Vector Enough Exploring Node Polysemy for Network Embedding
  5. Java 基础(继承)
  6. 下载资源 IT 天空分流站 速度非常快
  7. 【计算机网络】IPV4地址和IPV6地址 电脑是如何相互访问和连接的?
  8. [open3d]RGBD重建场景
  9. Acrobat could not access the recognition service, Acrobat无法使用识别服务
  10. 基于asp.net007个人网站博客系统