谈谈软件架构之美

引言: 软件架构就是在准确把控需求的基础上对系统的解剖。

          而准确把控需求,不仅仅体现把控现有的需求,而且还要考虑到需求(可能)变化的部分。为程序的可延展性充分考虑。我将从几个方面进行展开:

(1)“万物皆可对象”。

         面向对象方法学的出发点和基本原则是尽可能模拟人类习惯的思维方式,分析、设计和实现一个软件的方法和过程,尽可能接近于人类认识世界解决问题的方法和过程。

         软件系统是由对象组成的;把对象划分成类,每个对象类都定义一组数据和方法;对象彼此之间仅能通过传递消息互相联系;层次结构的继承。

(2) 类的提取

       曾经刚接触面向对象编程时,就是从实现程序功能的角度去设计的,是自底向上的(一开始就考虑细节),企图从底层实现程序这样的出发点来达到满足现实世界的软件需求的目标。但现在看来,这样的思维方法是不适用于面向对象的编程语言的。如果仅仅需要用封装模块的思想实现,那么这种则是面向过程的思想了。

        面向对象的精髓在于考虑问题的思路是从现实世界的人类思维习惯出发的。不要一上来就去想程序代码的实现,应该抛开具体编程语言的束缚,集中精力分析我们要实现的软件的业务逻辑,分析软件的业务流程,思考应该如何去描述和实现软件的业务。毕竟软件只是一个载体,业务才是我们真正要实现的目标。

        面向对象建立对象模型既包括自底向上的抽象过程,也包括自顶向下的分解过程。先不考虑问题解决的细节,把问题的最主要的方面抽象成为一个简单的框架。集中精力思考如何解决主要矛盾,在解决问题的过程中,把问题的细节分割成一个一个小问题,再专门去解决细节问题。

(3)封装

        指隐藏对象的属性和实现细节,仅仅对外公开接口。例如:我需要做一个四则运算,对外开放四个接口,用户只需传入相应的参数,然后就会返回正确结果。从整体上看,可以不用关注内部实现,通过某些途径可以完成调用者的需求即可。

        封装会带来一些好处:数据安全,例如类就是对象的一个封装,实现属性行为一体化。

(4)子系统的建立

1. 通过职责划分分离关注点。达到“系统中一部分变化了,而不会影响其他部分的改变”。子系统应该具有高内聚性,在我看来,高内聚是低耦合的基础。

2. 根据不同粒度级别分离关注点。先考虑粒度较大的子系统,其次再考虑更小粒度的子系统或类。先从软件高层进行思考,前期避免陷入过多的细节中。自顶向下,逐步细化。

3. 根据通用性分离关注点。不同的通用程度意味着变化的可能性不同。

(5)关于设计模式

        面向对象的特点是可维护可复用可扩展灵活性好,设计模式的好处在于:随着业务变得越来越复杂,面向对象依然能够使得程序结构良好,而面向过程却会导致程序越来越臃肿。因此,当我们在面临设计较复杂的系统时,考虑到程序的类的层次结构变得更加可维护性、可扩展性。

第一部分 论架构 第1章 架构概述  13 1.1 简介  13 1.2 创建软件架构  19 1.3 架构结构  23 1.4 好的架构  27 1.5 美丽的架构  28 致谢  30 参考文献  31 第2章 两个系统的故事:现代软件神话  33 2.1 混乱大都市  34 2.2 设计之城  40 2.3 说明什么问题  47 2.4 轮到你了  48 参考文献  48 第二部分 企业级应用架构 第3章 伸缩性架构设计  51 3.1 简介  51 3.2 背景  52 3.3 架构  56 3.4 关于架构的思考  61 第4章 记忆留存  67 4.1 功能和约束  68 4.2 工作流 69 4.3 架构关注点  70 4.4 用户反应  90 4.5 结论  90 参考文献  90 第5章 面向资源的架构:在Web中  91 5.1 简介  91 5.2 传统的Web服务  92 5.3 Web  94 5.4 面向资源的架构  99 5.5 数据驱动的应用  102 5.6 应用面向资源的架构  103 5.7 结论  108 第6章 数据增长:Facebook平台的架构  109 6.1 简介  109 6.2 创建一个社会关系Web服务  114 6.3 创建社会关系数据查询服务  121 6.4 创建一个社会关系Web门户:FBML  129 6.5 系统的支持功能  142 6.6 总结  147 第三部分 系统架构 第7章 Xen和虚拟化之美  151 7.1 简介  151 7.2 Xenoservers  152 7.3 虚拟化的挑战  154 7.4 半虚拟化  155 7.5 Xen的变换形式  158 7.6 改变的硬件,改变的Xen  163 7.7 经验教训  165 7.8 延伸阅读  166 第8章 Guardian:一个容错操作系统环境  169 8.1 Tandem/16,将来所有的计算机都会像这样构建 170 8.2 硬件  170 8.3 物理布局  172 8.4 处理器架构  172 8.5 处理器间总线  178 8.6 输入/输出  178 8.7 进程结构  179 8.8 消息系统  179 8.9 文件系统  183 8.10 轶闻趣事  188 8.11 弊端  189 8.12 后继者  190 8.13 延伸阅读  191 第9章 JPC:一个纯Java的x86 PC模拟程序  193 9.1 简介  193 9.2 概念验证  195 9.3 PC架构  198 9.4 Java性能技巧  199 9.5 把4GB放入4GB:这不起作用  200 9.6 保护模式的危险  203 9.7 从事一项毫无成功希望的斗争  206 9.8 劫持JVM  210 9.9 终极灵活性  220 9.10 终极安全性  222 9.11 第二次做会更好  223 第10章 元循环虚拟机的力量:Jikes RVM  225 10.1 背景  225 10.2 与运行时环境相关的传言  227 10.3 Jikes RVM简史  229 10.4 一个自足执行的运行时自举  230 10.5 运行时组件  234 10.6 经验教训  246 参考文献  247 第四部分 最终用户应用架构 第11章 GNU Emacs:滋长的特性是其优势  251 11.1 使用中的Emacs  252 11.2 Emacs的架构  254 11.3 滋长的特性  260 11.4 另外两个架构  262 第12章 当集市开始构建教堂  267 12.1 简介  267 12.2 KDE项目的历史和组织结构  269 12.3 Akonadi  274 12.4 ThreadWeaver  289 第五部分 语言与架构 第13章 软件架构:面向对象与面向函数  299 13.1 概述  299 13.2 函数式示例  302 13.3 函数式解决方案的模块性评价  305 13.4 面向对象视图  313 13.5 面向对象模块性的评价和改进  319 13.6 代理:将操作封装到对象中  323 致谢 328 参考文献 328 第14章 重读经典  331 14.1 所有东西都是对象  335 14.2 类型是隐式定义的  342 14.3 问题  348 14.4 砖块和灰浆建筑架构  352 参考资料  359 跋 漂亮地构建 363
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值