惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Webroot Blog
Webroot Blog
U
Unit 42
A
About on SuperTechFans
宝玉的分享
宝玉的分享
月光博客
月光博客
C
CERT Recently Published Vulnerability Notes
P
Privacy International News Feed
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
P
Privacy & Cybersecurity Law Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Securelist
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Spread Privacy
Spread Privacy
L
Lohrmann on Cybersecurity
Apple Machine Learning Research
Apple Machine Learning Research
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
B
Blog
I
Intezer
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
V
V2EX
L
LangChain Blog
AI
AI
G
GRAHAM CLULEY
T
Tor Project blog
人人都是产品经理
人人都是产品经理
D
Docker
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
I
InfoQ
Y
Y Combinator Blog
C
Comments on: Blog
GbyAI
GbyAI
www.infosecurity-magazine.com
www.infosecurity-magazine.com
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
aimingoo的专栏
aimingoo的专栏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
腾讯CDC
N
News and Events Feed by Topic
MyScale Blog
MyScale Blog
H
Help Net Security
Vercel News
Vercel News
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿

博客园 - ★农民兄弟★

求救----用LINQ实现分页控件的困惑! “高考奇人”张非的故事-----中国教育的怪现象(转载) 做人与读书(转载) 让设计与分析重用----基于构件开发的应用框架设计(转载) 大学教给了我们什么(转载) 软件设计本质论—白话面向对象(转载) 成长中不可或缺的是信仰(转载) 来自微软华人的软件人生经历:功夫在身外(转载) C# 3.0:LINQ 的演变及其对 C# 设计的影响(转载) ORM感想(转载) 项目经理是这样当的(转载) 如何从开发人员走向架构师(转载) 由侯捷先生的Design Patterns高级课程说开去(转载) 终于相信美国是个农村了(转载) 谈谈加班(转载) 软件开发岗位设置(转载) 架构设计贵在务实(转载) LINQ会为我们带来什么?(转载) C# 语言的几个层次(转载) - ★农民兄弟★
架构设计的三个维度(转载)
★农民兄弟★ · 2007-06-07 · via 博客园 - ★农民兄弟★

架构设计是一个非常大的话题,不管写几篇文章,接触到的始终只是冰山一角,更多的是实践中去体会。

这篇文章主要介绍的是面向对象OO,面向方面AOP,面向服务SOA这三个要素在架构设计中的位置与作用。

一、架构设计三个维度

架构设计有三个维度,或者说是我们在考虑架构时需要思考的三个方向。分别为:面向对象、面向方面、面向服务。这三个维度可以看作是正交的,但不同维度会互相印证,互相支撑。

整个架构的示意图如下所示:


二、面向对象

面向对象技术最初是从面向对象的程序设计开始的,它的出现以60年代simula语言为标志,并在Smalltalk语言的完善和标准化过程中得到更多的扩展和对以前的思想的重新注解。80年代中后期,面向对象程序设计逐渐成熟,被计算机界理解和接受,人们又开始进一步考虑面向对象的开发问题。直到现在,面向对象已经成为一种非常流行的编程方式,以及软件设计的架构。

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

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

三、面向方面

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

面向方面不仅仅是一门编程技术,同样也是一种架构设计的思路。如果说OO是纵向地分析、切割整个系统,那么可以认为AOP是横向地对系统作切片。简单地理解,OO与AOP分别从两个不同的角度给我们提供了分析系统的思路。面向方面可以弥补面向对象的缺陷,两种方式有机的结合在一起可以更加有效地分析系统。

我们认为OO是接近于人类认识自然的思维方式,但对于东方来说却并不是这样。当西方人看到一个复杂系统的时候,只会有一种思路,就是“分解”——将系统分解成一块一块,然后每个部分作研究。当东方人看到一个复杂系统的时候,更多地会关注系统中存在的关系,将系统作为一个有机的整体进行研究。

这两种思维方式都没有问题,结合起来的话分析问题解决问题会更好。面向对象与面向方面也同样如此,都能对应到人类认识自然的思维方式上。不过中国人理解AOP可能会有不同的感悟——我写的文章《读易[13]·闲谈中医与AOP》有简单的说明。

四、面向服务

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

社会产业总共分为三个,第一产业农业,第二产业工业,第三产业服务业。最早社会的主要产业是第一产业农业,将近有几万年的历史。十八世纪下半叶在英国开始的工业革命,对人们的生活产生了根本性的影响,社会的主要产业成了第二产业工业。

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

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

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

五、软件全局观

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

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

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

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

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