架构风格

  • 管道-过滤器风格:每个构建都有一组输入和输出,数据输入构建,经过内部处理,然后产生数据输出。
  • 主程序-子程序:面向过程的架构,所有的计算构件作为子程序协作工作,并由一个主程序顺序的调用这些子程序,构件用共享存储区交换数据。
  • 面向对象风格:面向对象架构风格的特征是将数据标识和基本操作封装在对象中。这种模式的构件是对象,对象维护自身表示的完整性,对象之间通过消息机制进行通信,对象交互时需要知道彼此的标识,通过对象之间的协作完成计算过程。
    面向对象好处:
    1. 可以自然映射到现实对象上,易于理解和编程(传统的说法)
    2. 低耦合:OO的继承和多态使得服务提供者可以仅提供接口,而将具体实现推迟到运行时,从而降低调用者和被调用者之间的耦合。(解耦是为了适应变化)
    3. 高类聚:OO是将数据,和对数据的操作绑定在一个类中,并通过可见性约束,只暴露给Client应该看见的操作和变量。(内聚是为了重用)
    4. 因为低耦合,高内聚,所以提供了更好的可维护、可重用、可扩展、灵活性。
  • 事件驱动风格(隐式调用):系统中的其他构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程。实例,数据库系统,用户界面。
  • 分层(C/S,B/S, 三层, n层结构)
    三层:展现层,业务层,数据库层
    n层:在三层的基础上,将业务层划分为多层的模块。
  • C2风格:构件与构件之间的直接连接是不允许的,件之间的通讯是通过以连接件为中介的异步消,交换机制来实现的,构件相对独立,构件之间依赖性较少。
    实例:有多个Client端的和一个Sever端的聊天工具,ClientA发消息给ClientB需要经过Sever连接转发。
  • 仓库风格:在仓库(Repository)风格中,有两种不同构件:中央数据结构(共享数据)说明当前状态,独立构件在中央数据存储上执行。共享数据可以是传统数据库,也可以是黑板系统。实例,智能系统。
  • 回调机制:回调机制是一种常见的设计模型,他把工作流内的某个功能,按照约定的接口暴露给外部使用者,为外部使用者提供数据,或要求外部使用者提供数据。
  • 虚拟机风格:解释器;基于规则的系统。实例,Java虚拟机,解释执行的程序。
  • 过程控制环路(闭环):控制环路风格是将过程输出的指定属性维护在一个特定的参考值(设定值),将事务处理看成输入、加工、输出、反馈、再输入的一个持续的过程模型。实例,空调的温度自动调节器(设定值是温度),巡航系统(设定值是速度)。
     闭环控制是根据控制对象输出反馈来进行校正的控制方式,它是在测量出实际与计划发生偏差时,按定额或标准来进行纠正的。闭环控制,从输出量变化取出控制信号作为比较量反馈给输入端控制输入量,一般这个取出量和输入量相位相反,所以叫负反馈控制,自动控制通常是闭环控制。比如家用空调温度的控制
  • 微内核:
    用例:Windows NT 操作系统,JBoss Web服务器
    优点:
    1. 灵活性和扩展性。微内核系统把最小核心功能同扩展功能和特定应用分离开来,使系统高内聚、低耦合、可以用plug-in的形式对应用进行扩展。
    2. 系统具有更高的可移植性。
    3. 健壮性,微内核系统将许多服务移植到用户空间,二者各自占用独立的内存空间,某个具体应用本身的错误或存在的问题不会影响内核的正常运行。并且模块各自独立的设计也可以把安全问题分解,使系统服务程序严格按照安全要求运行。
    4. 策略和机制的分离,从某种意义上讲微内核体系结构模式是一种特殊的层体系结构,这种把核心功能、扩展功能和特定应用分离,分处在不同的抽象层,分别实现机制和策略的思想,进一步体现了系统设计的高内聚、低耦合。
  • 回调机制
    回调(Callback)机制是一种常见的设计模型,他把工作流内的某个功能,按照约定的接口暴露给外部使用者,为外部使用者提供数据,或要求外部使用者提供数据。

=======================================================

软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。

 

同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;

回      调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;

异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。

回调和异步调用的关系非常紧密:使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。



黑板系统(Blackboard system):

黑板模型主要由“黑板”、知识源(Knowledge Source)和控制机构三大部分组成。

  • 黑板
    所谓“黑板”,就是一个分层的全局工作区(或称全局数据库)。它用来存储初始数据、中间结果和最终结果。整个黑板被分为若干层,每一层用于描述领域问题的某一类信息。高层信息可以看作是下层信息的抽象(或整体),反之,下层信息可以看作是上层信息的实例(或部分)。
  • 知识源
     所谓知识源,就是一个知识模块。黑板结构中具有多个知识源,每个知识源能用来完成某些特定的解题功能。知识源可以表示完成过程、规则集或逻辑断言等形式。一个知识源可以视为一个大规则,其条件部分称为知识源先决条件,动作部分称为知识源体。知识源的先决条件一旦与黑板状态匹配,该知识源便被激活,这时知识源体执行,其结果将导致黑板状态的变化。知识源之间互相独立,它们只能通过黑板进行通讯和互相调用。
  • 控制机构
    控制机构是求解问题的推理机构,由监督程序和调度程序组成。监督程序时刻注视着黑板状态,根据黑板状态采用某种策略选择合适的知识源。将其条件部分放入调度队列,随后条件部分与黑板状态匹配,若匹配成功,则将其动作部分放入调度队列。动作部分的执行便又改变了黑板状态。调度程序通过选择所谓“聚焦”来优先使用队列中最重要、最有希望的知识源来执行。

黑板模型是一种适时推理模型,即系统能按“最适宜”的原则自行决定什么时候和怎样使用知识。在黑板模型中,解空间被组织成层次性结构,层次结构中每一层上的信息都表示局部解,相应层次上的知识模块对这种信息进行处理,生成更高级的局部解,直到最后的解。

理想的黑板模型中没有控制机制,知识源含有领域知识且是自驱动的。这样,每个知识源都“注视”着黑板上的状态信息,而且能“适时”地决定是否要对黑板进行操作。所以,在理想黑板模型中,各知识源实际上是并行执行的(这非常类似于现在的股票交易),但在现有的串行环境下这种并行却难以实现。因此,才增设了控制机制等方法把黑板变成串行系统(这又类似于拍卖过程)。当然,这样就限制了黑板模型的潜在功效。




面向对象设计原则:


设计原则名称


设计原则简介


重要性


单一职责原则

(Single
Responsibility Principle, SRP)


类的职责要单一,不能将太多的职责放在一个类中。


开闭原则

(Open-Closed
Principle, OCP)


软件实体对扩展是开放的,但对修改是关闭的,即在不修改一个软件实体的基础上去扩展其功能。


里氏代换原则

(Liskov
Substitution Principle, LSP)


在软件系统中,一个可以接受基类对象的地方必然可以接受一个子类对象。


依赖倒转原则

(Dependency
Inversion Principle, DIP)


要针对抽象层编程,而不要针对具体类编程。


接口隔离原则

(Interface
Segregation Principle, ISP)


使用多个专门的接口来取代一个统一的接口。


合成复用原则

(Composite Reuse
Principle, CRP)


在系统中应该尽量多使用组合和聚合关联关系,尽量少使用甚至不使用继承关系。


迪米特法则

(Law of Demeter,
LoD)


一个软件实体对其他实体的引用越少越好,或者说如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,而是通过引入一个第三者发生间接交互。

时间: 2024-09-27 19:58:11

架构风格的相关文章

【转载】理解本真的REST架构风格

      本文将带您领略REST架构的起源.与Web的关系.REST架构的本质及特性,以及REST架构与其他架构风格之间的比较. 引子       在移动互联网.云计算迅猛发展的今天,作为一名Web开发者,如果您还没听说过"REST"这个buzzword,显然已经落伍了.夸张点说,甚至"出了门都不好意思跟别人打招呼".尽管如此,对于REST这个泊来品的理解,大多数人(包括一些资深的架构师)仍然停留在"盲人摸象"的阶段.常常听到各种各样关于RES

Web基础架构设计原则经典论文《架构风格与基于网络的软件架构设计》导读

1. 概述 Roy Fielding博士(见个人主页)是IETF发布的HTTP和URI协议的主要设计者.HTTP和URI是两个最为重要的Web基础技术架构协议,因此Fielding博士可谓是Web架构的奠基者之一. 除了学术上的卓越成就之外,Fielding博士还参与过很多开源软件的设计和开发工作.他是libwww-perl(世界上最早的HTTP开发库之一)的开发者,曾经负责Apache HTTP服务器中与HTTP.URI协议相关部分代码的开发.Fielding博士还指导过很多其他团队在HTTP

理解本真的REST架构风格

本文是"深入探索REST"专栏系列深度内容中的第二篇,它将带您领略REST架构的起源.与Web的 关系.REST架构的本质及特性,以及REST架构与其他架构风格之间的比较. 引子 在 移动互联网.云计算迅猛发展的今天,作为一名Web开发者,如果您还没听说过"REST"这个 buzzword,显然已经落伍了.夸张点说,甚至"出了门都不好意思跟别人打招呼".尽管如此,对于 REST这个泊来品的理解,大多数人(包括一些资深的架构师)仍然停留在"

RESTful架构风格下的4大常见安全问题|洞见

一.遗漏了对资源从属关系的检查  一个典型的RESTful的URL会用资源名加上资源的ID编号来标识其唯一性,就像这样/users/100 一般而言用户只能查看自己的用户信息,而不允许查看其它用户的信息.在这种情况下,攻击者很可能会尝试把这个URL里面的USER ID从100修改为其他数值,以期望应用返回指定用户的信息.不过由于这个安全风险太显而易见,绝大多数应用都会对当前请求者的身份进行校验,看其是否是编号为100的用户,校验成功才返回URL中指定的用户信息,否则会拒绝当前请求.  对于URL

架构师之路-在Dubbo中开发REST风格的远程调用

概述 dubbo支持多种远程调用方式,例如dubbo RPC(二进制序列化 + tcp协议).http invoker(二进制序列化 + http协议,至少在开源版本没发现对文本序列化的支持).hessian(二进制序列化 + http协议).WebServices (文本序列化 + http协议)等等,但缺乏对当今特别流行的REST风格远程调用(文本序列化 + http协议)的支持. 有鉴于此,我们基于标准的Java REST API--JAX-RS 2.0(Java API for REST

RESTful架构详解(转)

1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一. 他在论文中提到:"我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强.性能好.适宜通信的架构.REST指的是一组架构约束条件和原则." 如果一个架构符合REST

ENode 2.6 架构与设计简介以及全新案例分享

前言 ENode是一个应用开发框架,为开发人员提供了一整套基于DDD+CQRS+ES+EDA架构风格的解决方案.ENode从发布1.0开始到现在的差不多两年时间,我几乎每周都在更新设计或实现代码.以至于从来没有一个稳定的版本可以提供给大家,非常惭愧.但我相信,随着时间的推移和我的努力的积累,ENode一定会越来越稳定和成熟的.我觉得我此刻很幸福,因为我有自己的兴趣且有机会在业余时间为了自己的兴趣而奋斗. ENode开源地址:https://github.com/tangxuehua/enode

Windows 8风格应用开发入门 二十三 App Bar概述及使用规范

App Bar概述 Windows 8 Store应用中的App Bar(应用程序工具栏)起到的作用和Windows Phone中AppBar一样.我们可以向用户提供各种操作接口,实现导航或者触发命令等. AppBar一 般默认是隐藏的,也可以设置为始终可见.我们可以通过清扫屏幕上边缘或下边缘时显示AppBar, AppBar被点击之后或失去焦点后隐藏,当然我们也可以通过编程方式控制AppBar显示或隐藏. Windows 8 Store应用中通常包含两种AppBar: 1)底部AppBar 底

从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训

[编者按]本文作者为 Matt McLarty,通过介绍 SOA 的兴衰变化,总结了微服务应该借鉴的5条经验教训.文章系国内 ITOM 管理平台 OneAPM 编译呈现. SOA 的兴衰变化让我们更了解如何充分利用微服务 正如笔者在上文<微服务架构是敏捷软件架构>中提到的,笔者对微服务架构的第一反应,就是质疑它跟面向服务架构(SOA)有何区别.还有很多人将这两种架构联系在一起.詹姆斯·刘易斯和马丁·福勒在他们的权威博客中包含了一个侧边栏,进行微服务和 SOA 的对比.对此,怀疑派做出的回应是二