什么是架构?

软件体系结构通常被称为架构,指可以预制和可重构的软件框架结构。架构尚处在发展期,对于其定义,学术界尚未形成一个统一的意见,而不同角度的视点也会造成软件体系结构的不同理解,以下是一些主流的标准观点。
ANSI/IEEE 610.12-1990软件工程标准词汇对于体系结构定义是:“体系架构是以构件、构件之间的关系、构件与环境之间的关系为内容的某一系统的基本组织结构以及知道上述内容设计与演化的原理(principle)”。
Mary Shaw和David Garlan认为软件体系结构是软件设计过程中,超越计算中的算法设计和数据结构设计的一个层次。体系结构问题包括各个方面的组织和全局控制结构,通信协议、同步,数据存储,给设计元素分配特定功能,设计元素的组织,规模和性能,在各设计方案之间进行选择。Garlan & Shaw模型[1]的基本思想是:软件体系结构={构件(component),连接件(connector),约束(constrain)}.其中构件可以是一组代码,如程序的模块;也可以是一个独立的程序,如数据库服务器。连接件可以是过程调用、管道、远程过程调用(RPC)等,用于表示构件之间的相互作用。约束一般为对象连接时的规则,或指明构件连接的形式和条件,例如,上层构件可要求下层构件的服务,反之不行;两对象不得递规地发送消息;代码复制迁移的一致性约束;什么条件下此种连接无效等。
关于架构的定义还有很多其他观点,比如Bass定义、Booch & Rumbaugh &Jacobson定义、Perry & Wolf模型[7]、Boehm模型等等,虽然各种定义关键架构的角度不同,研究对象也略有侧重,但其核心的内容都是软件系统的结构,其中以Garlan & Shaw模型为代表,强调了体系结构的基本要素是构件、连接件及其约束(或者连接语义),这些定义大部分是从构造的角度来甚至软件体系结构,而IEEE的定义不仅强调了系统的基本组成,同时强调了体系结构的环境即和外界的交互。

什么是模式?
   模式(Pattern)的概念最早由建筑大师Christopher Alexander于二十世纪七十年代提出,应用于建筑领域,八十年代中期由Ward Cunningham和Kent Beck将其思想引入到软件领域,Christopher Alexander将模式分为三个部分:首先是周境(Context,也可以称着上下文),指模式在何种状况下发生作用;其二是动机(System of Forces),意指问题或预期的目标;其三是解决方案(Solution),指平衡各动机或解决所阐述问题的一个构造或配置(Configuration)。他提出,模式是表示周境、动机、解决方案三个方面关系的一个规则,每个模式描述了一个在某种周境下不断重复发生的问题,以及该问题解决方案的核心所在,模式即是一个事物(thing)又是一个过程(process),不仅描述该事物本身,而且提出了通过怎样的过程来产生该事物。这一定义已被软件界广为接受。

架构和模式应该是一个属于相互涵盖的过程,但是总体来说Architecture更加关注的是所谓的High-Level Design,而模式关注的重点在于通过经验提取的“准则或指导方案”在设计中的应用,因此在不同层面考虑问题的时候就形成了不同问题域上的Pattern。模式的目标是,把共通问题中的不变部分和变化部分分离出来。不变的部分,就构成了模式,因此,模式是一个经验提取的“准则”,并且在一次一次的实践中得到验证,在不同的层次有不同的模式,小到语言实现(如Singleton)大到架构。在不同的层面上,模式提供不同层面的指导。根据处理问题的粒度不同,从高到低,模式分为3个层次:架构模式(Architectural Pattern)、设计模式(Design Pattern)、实现模式(Implementation Pattern).架构模式是模式中的最高层次,描述软件系统里的基本的结构组织或纲要,通常提供一组事先定义好的子系统,指定它们的责任,并给出把它们组织在一起的法则和指南。比如,用户和文件系统安全策略模型,N-层结构,组件对象服务等,我们熟知的MVC结构也属于架构模式的层次。一个架构模式常常可以分解成很多个设计模式的联合使用。设计模式是模式中的第二层次,用来处理程序设计中反复出现的问题。例如,[GOF95][2]总结的23个基本设计模式——Factory Pattern, Observer Pattern等等。实现模式是最低也是最具体的层次,处理具体到编程语言的问题。比如,类名,变量名,函数名的命名规则;异常处理的规则等等。

来自:http://dev.yesky.com/378/2012378.shtml

由于[GOF95]是论述软件模式的著作的第一本,也是OO设计理论著作中最流行的一本,因此有些人常常使用设计模式(Design Pattern)一词来指所有直接处理软件的架构、设计、程序实现的任何种类的模式。另外一些人则强调要划分三种不同层次的模式:架构模式(Architectural Pattern)、设计模式(Design Pattern)、成例(Idiom)。成例有时称为代码模式(Coding Pattern)。

这三者之间的区别在于三种不同的模式存在于它们各自的抽象层次和具体层次上。架构模式是一个系统的高层次策略,涉及到大尺度的组件以及整体性质和力学。架构模式的好坏可以影响到总体布局和框架性结构。设计模式是中等尺度的结构策略。这些中等尺度的结构实现了一些大尺度组件的行为和它们之间的关系。模式的好坏不会影响到系统的总体布局和总体框架。设计模式定义出子系统或组件的微观结构。代码模式(或成例)是特定的范例和与特定语言有关的编程技巧。代码模式的好坏会影响到一个中等尺度组件的内部、外部的结构或行为的底层细节,但不会影响到一个部件或子系统的中等尺度的结构,更不会影响到系统的总体布局和大尺度框架。

1、代码模式或成例(Coding Pattern 或 Idiom)
代码模式(或成例)是较低层次的模式,并与编程语言密切相关。代码模式描述怎样利用一个特定的编程语言的特点来实现一个组件的某些特定的方面或关系。
较为著名的代码模式的例子包括双检锁(Double-Check Locking)模式等。

2、设计模式(Design Pattern)
一个设计模式提供一种提炼子系统或软件系统中的组件的,或者它们之间的关系的纲要设计。设计模式描述普遍存在的在相互通讯的组件中重复出现的结构,这种结构解决在一定的背景中的具有一般性的设计问题。
设计模式常常划分成不同的种类,常见的种类有:
创建型设计模式,如工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)模式、原型(Prototype)模式、单例(Singleton)模式,建造(Builder)模式等
结构型设计模式,如合成(Composite)模式、装饰(Decorator)模式、代理(Proxy)模式、享元(Flyweight)模式、门面(Facade)模式、桥梁(Bridge)模式等
行为型模式,如模版方法(Template Method)模式、观察者(Observer)模式、迭代子(Iterator)模式、责任链(Chain of Responsibility)模式、备忘录(Memento)模式、命令(Command)模式、状态(State)模式、访问者(Visitor)模式等等。
        以上是三种经典类型,实际上还有很多其他的类型,比如Fundamental型、Partition型,Relation型等等
设计模式在特定的编程语言中实现的时候,常常会用到代码模式。比如单例(Singleton)模式的实现常常涉及到双检锁(Double-Check Locking)模式等。

3、架构模式(Architectural Pattern)
一个架构模式描述软件系统里的基本的结构组织或纲要。架构模式提供一些事先定义好的子系统,指定它们的责任,并给出把它们组织在一起的法则和指南。有些作者把这种架构模式叫做系统模式[STELTING02]。
一个架构模式常常可以分解成很多个设计模式的联合使用。显然,MVC模式就是属于这一种模式。MVC模式常常包括调停者(Mediator)模式、策略(Strategy)模式、合成(Composite)模式、观察者(Observer)模式等。
此外,常见的架构模式还有:
·Layers(分层)模式,有时也称Tiers模式
·Blackboard(黑板)模式
·Broker(中介)模式
·Distributed Process(分散过程)模式
·Microkernel(微核)模式
架构模式常常划分成如下的几种:
一)、 From Mud to Structure型。帮助架构师将系统合理划分,避免形成一个对象的海洋(A sea of objects)。包括Layers(分层)模式、Blackboard(黑板)模式、Pipes/Filters(管道/过滤器)模式等。
二)、分散系统(Distributed Systems)型。为分散式系统提供完整的架构设计,包括像Broker(中介)模式等。
三)、人机互动(Interactive Systems)型,支持包含有人机互动介面的系统的架构设计,例子包括MVC(Model-View-Controller)模式、PAC(Presentation-Abstraction-Control)模式等。
四)、Adaptable Systems型,支持应用系统适应技术的变化、软件功能需求的变化。如Reflection(反射)模式、Microkernel(微核)模式等。

来自:http://fanqiang.chinaunix.net/program/project/2005-06-16/3316.shtml

Layers架构模式
在收集到用户对软件的要求之后,架构设计就开始了。架构设计一个主要的目的,就是把系统划分成为很多"板块"。划分的方式通常有两种,一种是横向的划分,一种是纵向划分。
横向划分将系统按照商业目的划分。比如一个书店的管理系统可以划分成为进货、销售、库存管理、员工管理等等。
纵向划分则不同,它按照抽象层次的高低,将系统划分成"层",或叫Layer。比如一个公司的内网管理系统通常可以划分成为下面的几个Layer:
一、网页,也就是用户界面,负责显示数据、接受用户输入;
二、领域层,包括JavaBean或者COM对象、B2B服务等,封装了必要的商业逻辑,负责根据商业逻辑决定显示什么数据、以及如何根据用户输入的数据进行计算;
三、数据库,负责存储数据,按照查询要求提供所存储的数据。
四、操作系统层,比如Windows NT或者Solaris等
五、硬件层,比如SUN E450服务器等
有人把这种Layer叫做Tier,但是Tier多带有物理含义,不同的Tier往往位于不同的计算机上,由网络连接起来,而Layer是纯粹逻辑的概念,与物理划分无关。
Layers架构模式的好处是:
第一、任何一层的变化都可以很好地局限于这一层,而不会影响到其他各层。
第二、更容易容纳新的技术和变化。Layers架构模式容许任何一层变更所使用的技术

【Kiki】由于我只接触过这种,其他(Facade架构模式、Mediator架构模式和Interpreter架构模式)就不转载了。

来自:http://java.ccidnet.com/art/3749/20060511/550769_1.html

1.什么是模式?
模式,即pattern。其实就是解决某一类问题的方法论。你把解决某类问题的方法总结归纳到理论高度,那就是模式。
Alexander给出的经典定义是:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。
模式有不同的领域,建筑领域有建筑模式,软件设计领域也有设计模式。当一个领域逐渐成熟的时候,自然会出现很多模式。
什么是框架?
框架,即framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。

2.为什么要用模式?
因为模式是一种指导,在一个良好的指导下,有助于你完成任务,有助于你作出一个优良的设计方案,达到事半功倍的效果。而且会得到解决问题的最佳办法。
为什么要用框架?
因为软件系统发展到今天已经很复杂了,特别是服务器端软件,设计到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟,稳健的,他可以处理系统很多细节问题,比如,事物处理,安全性,数据流控制等问题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,你可以直接享受别人升级代码带来的好处。
框架一般处在低层应用平台(如J2EE)和高层业务逻辑之间的中间层。

软件架构模式和设计模式相关推荐

  1. 软件架构模式和设计模式(书摘)

    什么是架构? 软件体系结构通常被称为架构,指可以预制和可重构的软件框架结构.架构尚处在发展期,对于其定义,学术界尚未形成一个统一的意见,而不同角度的视点也会造成软件体系结构的不同理解,以下是一些主流的 ...

  2. 软件体系架构模式之一什么是软件架构模式

    什么是软件架构模式 计划启动未开发的软件项目?然后选择正确的架构模式将对项目的结果起关键作用.选择市场上最流行或最新的技术并不总是意味着会带来最好的结果.但是,选择最合适的解决方案将为行之有效的问题和 ...

  3. 架构师必须了解的 5 种最佳软件架构模式

    世界变得越来越依赖软件,软件系统已经渗透到了人类生活的方方面面,并带来了很多便利.从移动应用(用于和人联系),到医疗应用和深度学习模型,到金融技术系统,再到智能建筑(利用技术来自动化许多功能). 为了 ...

  4. [转]经典软件架构模式

    文/wadehan (一)      架构模式是什么 (二)      分层模式案例 (三)      微核模式案例 (四)      管道与过滤器案例 (五)      MVC模式案例 (六)    ...

  5. ea设计 mvc模式_MVC设计模式

    写了几天代码,然后对之前学到的知识,进行反思,写出来放在QQ空间上和博客上,目的是互相学习,然后希望可以得到编程高手的补充!这是我转载加修改的博客. 这是我做了2.3天左右的JavaWeb管理系统,b ...

  6. 10种常见的软件架构模式-快速记忆

    10种常见的软件架构模式-快速记忆 这里通过数字宫殿的方法快速记忆10种常见的设计模式,通过记忆名字+理解的情况下熟悉常见的软件架构模式 文章目录 10种常见的软件架构模式-快速记忆 前言 一.快速记 ...

  7. [实训笔记] 01 软件架构模式

    第 1 讲 软件模式架构 1.软件架构模式概念 1.1 架构是什么 定义 架构是构成一个系统的基础组织结构,包括系统的组件构成,组件间的相互关系.系统和其所在的关系.以及指导架构设计和演进的相关准则. ...

  8. 框架模式与设计模式之区别

    http://my.oschina.net/u/991183/blog/109854  有很多程序员往往把框架模式和设计模式混淆,认为MVC是一种设计模式.实际上它们完全是不同的概念. 框架.设计模式 ...

  9. 精华:软件架构模式的7种武器

    架构模式是对给定上下文的软件架构中常见问题的一种通用的可复用的解决方案.一种模式就是特定上下文的问题的一种解决方案. 然而,很多开发者至今还对各种软件架构模式之间的差别搞不清,甚至对其所知甚少. 大体 ...

最新文章

  1. UIWindow 使用介绍
  2. 技术分享连载(六十)
  3. 我用的 cordova 插件
  4. 10.4 使用instanceof操作符判断对象类型
  5. 方根法公式_仓储管理笔记之库存分析法:ABC分析法、区域合并法......
  6. scanf 输入十六进制_使用C语言中的scanf()在字符变量中输入十进制,八进制和十六进制值...
  7. 【今日CV 视觉论文速览】29 Nov 2018
  8. mysql查看系统参数
  9. 2007浙大复试上机考试题目1--最小长方形
  10. PoA共识引擎算法实现分析(2)
  11. Kubernetes之Pod生命周期详解
  12. 开发基于GUI的R包(1)
  13. 教你同时查询安能物流多个单号的物流情况并保存
  14. 21世纪最需要的7种人才
  15. .NET面试宝典130道经典面试真题及答案
  16. 火车票分批放票大概时间
  17. 【历史上的今天】7 月 4 日:第一本电子书问世;磁条卡的发明者出生;掌上电脑先驱诞生
  18. McAfee解读风险管理之道 企业安全面临新挑战
  19. python按指定数量划分图片与对应的xml数据(.png格式为列)
  20. php路由固件升级提示,【2017年整理】路由器固件修改教程(个人理解)-无线路由区-中国无线论坛 -.doc...

热门文章

  1. MySQL删除唯一性约束unique
  2. Audio HAL 提供的操作
  3. 狼羊白菜过河问题C++
  4. 通用uart测试工具
  5. vision transformer 剪枝论文汇总
  6. 【MR设备】燧光MR设备极简教程(使用篇)
  7. digester rule
  8. oracle11g dataguard 线上维护问题记录
  9. 【数据增强】——弹性变形(Elastic Distortion)
  10. boost_Boost Note团队的来信