`
chenjie19891104
  • 浏览: 12395 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

软件架构设计的三个维度

阅读更多
软件架构设计的三个维度
 
作者: 陈亮亮 出处:软件世界
 

架构设计是一个非常大的话题,不管写几篇文章,接触到的始终只是冰山一角,更多的是实践中去体会。这篇文章主要介绍面向对象OO、面向方面AOP和面向服务SOA这三个要素在架构设计中的位置与作用。

架构设计有三个维度,或者说是我们在考虑架构时需要思考三个方向。

这三个维度分别为面向对象、面向方面、面向服务。

这三个维度可以看作是正交的,但不同维度会互相印证,互相支撑,整个架构的示意图如图所示。

图:架构三维度结构图

面向对象

面向对象技术最初是从面向对象的程序设计开始的,它的出现以上世纪60年代Simula语言为标志,并在Smalltalk语言的完善和标准化过程中得到更多的扩展和对以前思想的重新注解。

上世纪80年代中后期,面向对象程序设计逐渐成熟,被计算机界理解和接受,人们又开始进一步考虑面向对象的开发问题。直到现在,面向对象已经成为一种非常流行的编程方式,以及软件设计的架构。

面向对象提出有三个主要目标:重用性、灵活性和扩展性,强调对象的“抽象”、“封装”、“继承”和“多态”。它能让人们以更加接近于现实世界的方式来思考程序,这点可以说是面向对象最大的进步。

在OO思想的运用上,业界出现了很多好的经验与技巧,从而涌现出大量的设计模式,可以说面向对象是系统分析与设计时的一个很重要的方面。

面向方面

面向方面最初来源于hook技术,本质上就是满足扩展的需求,可以在程序中自由扩展功能。

面向方面不仅仅是一门编程技术,同样也是一种架构设计的思路。如果说OO是纵向地分析、切割整个系统,那么可以认为AOP是横向地对系统作切片。

简单地理解,OO与AOP分别从两个不同的角度给我们提供了分析系统的思路。面向方面可以弥补面向对象的缺陷,两种方式有机的结合在一起,可以更加有效地对系统进行分析。

我们认为OO是接近于人类认识自然的思维方式,但对于东方而言却并不一定是这样的。

当西方人看到一个复杂系统的时候,只会有一种思路,就是“分解”,将系统分解成一块一块,然后每个部分进行研究。

当东方人看到一个复杂系统的时候,更多地会关注系统中存在的关系,将系统作为一个有机的整体进行研究,这也是东方和西方在事物看法上存在的差异。

这两种思维方式都没有问题,如果结合起来分析问题,解决问题会更好。面向对象与面向方面也同样如此,都能对应到人类认识自然的思维方式上。

面向服务

面向服务可以说是最近炒得比较火热的概念。包括现在提到的SaaS(Software as a service),软件即服务。准确而言,面向服务不仅仅是软件行业的概念,这个要从社会的产业结构说起。

社会产业总共分为三个,第一产业农业,第二产业工业,第三产业服务业。最早社会的主要产业是第一产业农业,将近有几万年的历史。

十八世纪下半叶在英国开始的工业革命,对人们的生活产生了根本性的影响,社会的主要产业成了第二产业工业。

现在仍然属于工业时代,或者有人说的“后工业时代”。而在后工业时代,社会的经济体制必定要向第三产业服务业逐渐转型。面向服务其实是社会经济体制重心的一种迁移。

还是说回到软件行业,社会的主要产业将转变成服务业,自然软件行业也会出现对应的变化,那就是这里提到的面向服务。面向服务今后会影响到软件的交付模式,会对整个软件行业的体制产生影响。

而说到架构层面,面向服务是系统发布功能的一种方式。并且基于这种方式下不同的系统之间能有效地通信、协作。常见的实现技术就是Web Service。

软件全局观

软件架构设计的三个维度:面向对象、面向方面、面向服务。

最年长的一个维度就是面向对象,发展了好几十年,也是相对而言比较成熟的一个维度。它解决的问题是系统内部结构的设计。

面向方面思想的提出能够弥补面向对象的缺陷。面向对象的方式不能实现横切关注点的分离,而面向方面正是为了解决这个问题。面向方面与面向对象一样都是解决系统内部结构的设计。

面向服务更多的是涉及到系统的外部,简单地说就是发布功能。它并不关注系统内部结构的实现,所以说面向服务与面向对象或者面向方面并不冲突。

这三个维度并不是绝对孤立的,它们之间会互相影响、制约,相互发展的。我们在分析架构的时候需要同时考虑到这三个维度的问题,这样有助于我们设计出更加优秀的架构。

分享到:
评论

相关推荐

    软件架构设计最佳实践

    - **多维视角下的考量**:正如建筑设计需要综合考虑业主的需求、社会环境、消防安全等多个方面一样,软件架构设计也需要从不同维度(如逻辑视图、实现视图、部署视图等)来全面评估和规划系统。这有助于确保各个...

    软件架构设计的思想与模式

    软件架构师在软件组织中的角色举足轻重,负责制定影响整个项目的核心决策,这些决策不仅包括技术层面的,还应涉及管理、过程和质量保证等多个维度。 一、软件架构设计的核心思想 软件架构设计的核心思想是追求投入...

    测控软件架构设计

    ### 测控软件架构设计知识点概述 #### 一、架构设计方法 ##### 架构过程——以复杂系统为例 **1. 总体架构** - 定义整个系统的框架和关键组成部分,包括硬件、软件以及它们之间的交互方式。 - 确保系统能够在宏观...

    软件架构设计的思想和模式

    一个优秀的架构设计不仅需要考虑技术上的可行性,还需要充分考虑到项目的经济性、团队的合作、软件的质量以及未来的可扩展性等多个维度。只有这样,才能确保软件产品能够在激烈的市场竞争中脱颖而出,为企业创造更大...

    软件架构设计与模式高级培训

    ### 软件架构设计与模式高级培训知识点详解...综上所述,软件架构设计是一项综合性很强的工作,需要从多个维度考虑问题,并结合业务需求和技术趋势,选择合适的架构模式和技术栈,以实现高性能、可维护性强的软件系统。

    电子元器件行业半导体研究专题一:从三个维度看芯片设计-20191030-国信证券-37页.pdf

    "电子元器件行业半导体研究专题一:从三个维度看芯片设计" 本报告从三个维度对芯片设计进行分析,分别是生态角度、业绩角度和估值角度。从生态角度看,芯片设计需要考虑到EDA软件、底层架构、合作伙伴和高端技术...

    软件架构设计的思想和方法

    5. **全面解决方案**:高质量软件不能仅依靠单一节点解决问题,需要从多个维度出发进行全面考量。 #### 三、结论 软件架构设计的重要性不容忽视。通过深入理解软件架构的核心思想和方法,架构师可以更好地领导团队...

    架构设计方法教材

    #### 三、架构设计中的“大格局”需求 - **运营阶段的需求**: - **可用性**:确保系统能够在各种情况下正常运行。 - **安全性**:保护数据安全,防止未授权访问。 - **高性能**:处理高并发请求的能力。 - **...

    中科院软件架构讲义

    ### 知识点总结 #### 一、现代软件开发...通过对现代软件开发过程的理解、从系统工程角度构建架构的方法、应对质量属性的具体策略以及软件架构的模型驱动与演化的探讨,读者将能够掌握一套完整的软件架构设计体系。

    一种基于软件定义的通导遥一体化有效载荷架构设计

    然后,提出了一种基于“三层和七功能分区”的软件定义载荷架构,设计了一种软件定义载荷设计和研制支撑数字化平台设计架构,同时提出了软件定义载荷业务软件设计流程;最后,结合在轨有效载荷研制经验,总结了基于...

    软件系统的架构设计方案.doc

    ### 软件系统的架构设计方案 ...综上所述,软件系统的架构设计是一个综合性的工程问题,需要结合多种技术和方法论来进行。通过合理的架构设计,可以大大提高软件的质量、可维护性和扩展性,从而更好地满足用户的需求。

    蔡学镛软件架构入门

    通过以上介绍可以看出,《蔡学镛软件架构入门》这本书深入浅出地讲解了软件架构的基本概念和设计方法,为初学者提供了一个清晰的学习路径。希望读者能够通过学习这些内容,掌握软件架构设计的核心理念和技术要点,...

    软件架构风险管理.pptx

    风险评估可以使用概率和影响两个维度来评估风险的严重性。概率是指风险发生的可能性,而影响是指风险对软件架构的影响程度。通过评估风险的可能性和影响,可以确定风险的优先级。 确定风险优先级是软件架构风险管理...

    程序设计课程体系的维度与层次划分-程序设计-设计.pdf

    该方案将程序设计课程体系划分为三个维度:界面编程及用户交互、编程访问外部资源和各种平台下的编程。每个维度都可以进一步划分为多个层次,每个层次都有其明确的教学目标和教学内容。 第一维度:界面编程及用户...

    企业级应用软件架构开发过程与实践3

    在设计软件时,必须深入分析业务场景,确保软件功能与业务需求高度匹配,同时考虑到技术实现的可能性。 #### 软件工程基本原理:问题解决的科学方法 软件开发本质上是一个复杂问题解决的过程,涉及到认知学和方法...

    追求代码质量: 软件架构的代码质量

    这种设计策略使得更换第三方实现时,影响范围局限于接口包,降低了整体架构的风险。同时,通过分析代码覆盖率报告和测试用例,可以确保对变更的充分验证,避免引入新的问题。 随着时间推移,架构可能会因为不恰当的...

Global site tag (gtag.js) - Google Analytics