如果你对项目管理、系统架构有兴趣,请加微信订阅号“softjg”,加入这个PM、架构师的大家庭

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

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

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

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

面向对象

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

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

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

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

面向方面

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

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

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

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

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

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

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

面向服务

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

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

十八世纪下半叶在英国开始的工业革命,对人们的生活产生了根本性的影响,社会的主要产业成了第二产业工业。
现在仍然属于工业时代,或者有人说的“后工业时代”。而在后工业时代,社会的经济体制必定要向第三产业服务业逐渐转型。面向服务其实是社会经济体制重心的一种迁移。

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

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

软件全局观

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

最年长的一个维度就是面向对象,发展了好几十年,也是相对而言比较成熟的一个维度。它解决的问题是系统内部结构的设计。
面向方面思想的提出能够弥补面向对象的缺陷。面向对象的方式不能实现横切关注点的分离,而面向方面正是为了解决这个问题。面向方面与面向对象一样都是解决系统内部结构的设计。

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

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

希望通过本文的介绍,能够给你带来帮助。

如果你对项目管理、系统架构有兴趣,请加微信订阅号“softjg”,加入这个PM、架构师的大家庭

转载于:https://www.cnblogs.com/wyxhd2008/p/3721758.html

详细介绍软件架构设计的三个维度相关推荐

  1. 软件架构设计的三个维度,软件架构师需要知道的点,了解一下吧!

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

  2. 软件架构设计_软件架构设计的三个维度,软件架构师需要知道的点,了解一下吧...

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

  3. 软件架构设计的三个维度

    http://www.uml.org.cn/zjjs/200705101.asp 软件架构设计的三个维度   作者: 陈亮亮 出处:软件世界   架构设计是一个非常大的话题,不管写几篇文章,接触到的始 ...

  4. SOC 时钟源PLL锁相环详细介绍——IC设计时序逻辑的灵魂

    SOC 时钟源PLL详细介绍--IC设计时序逻辑的灵魂 本节介绍SOC设计中时钟的组件PLL部分的介绍,PLL可以认为是IC设计中时序逻辑的灵魂所在,理解和掌握PLL的结构和原理是非常有必要的

  5. 可扩展架构设计的三个维度

    业界对于可扩展的系统架构设计有一个朴素的理念,就是: 通过加机器就可以解决容量和可用性问题 这一理念在"云计算"概念疯狂流行的今天,得到了广泛的认可!对于一个规模迅速增长的系统而言 ...

  6. 软件架构设计_给非专业人士介绍——软件架构设计工作

    软件架构设计 架构设计是高层设计,是设计决策之上的决策.它为决策引入的额外的约束,这种约束不产生立即可见的效果. 用一个例子来辅助我们的表述.比如你买了一间新房子,有5个房间,你的床放哪里?书柜放哪里 ...

  7. IT架构师介绍-软件架构设计学习第一天(非原创)

    文章大纲 一.架构师定义 二.架构师分类与具备能力 三.研发人员发展的技术路线 四.架构师知识体系 五.参考文章 一.架构师定义   什么是架构师,这个聊架构话题时永恒的问题.每个公司对架构师的定位也 ...

  8. 系统架构师—软件架构设计(三)

    软件架构评估 质量属性 1.性能:指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件的个数. 如响应时间.吞吐量. 设计策略:优先级队列.增加计算资源.减少计 ...

  9. 阿里P8架构师谈:Dubbo的详细介绍、设计思路、以及4大适用场景

    Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用 ...

最新文章

  1. Glide和Govendor安装和使用
  2. gcd的二进制优化笔记
  3. 单调队列 Monotonic Queue / 单调栈 Monotonic Stack
  4. 保护 .NET Core 项目的敏感信息
  5. Hadoop生态Flume(一)介绍
  6. 机械指挥官——全国领先的工程机械管理平台
  7. 华强北二手手机卖不出去,闲鱼砸一亿现金帮扶
  8. HALCON 21.11:深度学习笔记---异常检测(9)
  9. java之Junit
  10. 关于圆与直线所包含点的多少关系证明
  11. matlab 拟合函数 调用,matlab拟合函数
  12. c 中空格的asc码表_泰格豪雅卡莱拉系列计时码表,车迷心中的永远的“白月光”...
  13. 视频文件损坏怎么修复,赤兔视频修复软件助您
  14. con和com开头单词规律_com与con 前缀的单词
  15. 用户画像的定义及构建方法
  16. UDS服务中关于服务器响应行为的实现规则
  17. 网络能ping通,浏览器无法上网
  18. kubernetes中证书生成
  19. 【小5聊】layui第三方插件-xm-select参数
  20. zen cart产品页面伪静态后-c-.html,zencart .htaccess伪静态文件规则

热门文章

  1. 四、Vue组件化开发学习笔记——父子组件通信,父级向子级传值(props),子级向父级传值(自定义事件),slot插槽
  2. python 使用 asyncio 包处理并发
  3. LeetCode 1798. 你能构造出连续值的最大数目
  4. LeetCode 1751. 最多可以参加的会议数目 II(DP + 二分查找)
  5. LeetCode 930. 和相同的二元子数组(哈希+前缀和)
  6. 程序员面试金典 - 面试题 17.06. 2出现的次数(找递推规律)
  7. qr分解求线性方程组_计算方法/数值分析第三章 线性方程组的数值解法
  8. diskfileitemfactory 需要的包_浅析电动汽车电池包低压线束设计及制造
  9. 电影评论分类:二分类问题
  10. Python数据结构常见的八大排序算法(详细整理)