热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

软件架构模式描述了如何,软件架构模式中下列什么是正确

http:blog.csdn.netbaidyarticledetails6985640浅谈架构模式[此文于2010年7月29日被重新编辑

http://blog.csdn.net/baidy/article/details/6985640

浅谈架构模式

[此文于2010年7月29日被重新编辑]

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

组成派

      专注的哈密瓜 Shaw在《软件体系结构:一门初露端倪学科的展望》中为“软件架构”给出了非常简明的定义:软件系统的架构将系统描述为计算机组件及组件之间的交互(The architecture of a software system defines that system in terms of computational components and interactions among those components.)。

      上述定义有如下两个显著特点:

      (1)关注架构是实践中的客体——软件,以软件本身为描述对象;

      (2)分析了软件的组成,即软件由承担不同计算任务的组件组成,这些组件通过相互交互完成更高层次的计算。

决策派

      RUP(Rational Unified Process,统一过程)中的软件架构定义:

      软件架构包含了关于一下问题的重要决策:

      (1)软件系统的组织;

      (2)选择组成系统的结构元素和他们之间的接口,以及当这些元素相互协作是所体现的行为;

      (3)如何组合这些元素,使他们逐渐合成为更大的子系统;

      (4)用于指导这个系统组织的架构风格:这些元素以及它们的接口、协作和合作。

      软件架构不仅仅注重软件本身的结构和行为,还注重其他特性:使用、功能性、性能、弹性、重用、可理解性、经济和技术的限制及权衡,以及美学等。

      上述定义有如下两个显著特点:

      (1)关注架构实践中的主体——人,以人的决策为描述对象;

      (2)归纳了架构决策的类型,指出架构决策不仅包括关于软件系统的组织、元素、子系统和架构风格等几类决策,还包括关于众多非功能性需求的决策。

      软件架构模式是高度抽象的、适用于许多类似系统的、预先定义好的一种特殊的软件架构。

架构模式的经典分类

架构模式的现代分类

      由于经典模式比较久远,下面对现代模式简要阐述一下。

分层:从不同的层次来观察系统,处理不同层次问题的对象被封装到不同的层中,最大的优点是将整体问题局部化,把可能的变化分别封装在不同的层中。第N层只能被第N-1层调用或者被位于上一层的任意一层调用。

          图1 典型的分层架构

管道—过滤器:用数据流的观点来观察系统。整个系统由一些管道和过滤器组成,需要处理的数据同管道传送给每一个过滤器,每个过滤器就是一个处理步骤。每个过滤器可以单独修改,功能单一,并且它们之间的顺序可以进行配置。但数据通过了所有的过滤器后,就完成了所有的处理操作,得到了最终的处理结果。这种架构的缺点是交互性差,原因在于它没有“边界对象”——它是控制对象和实体对象的间插排列成的一条流水线。

一个典型的管道/过滤器体系结构的例子是以Unix shell编写的程序。Unix既提供一种符号,以连接各组成部分(Unix的进程),又提供某种进程运行时机制以实现管道。另一个著名的例子是传统的编译器。传统的编译器一直被认为是一种管道系统,在该系统中,一个阶段(包括词法分析、语法分析、语义分析和代码生成)的输出是另一个阶段的输入。

                         图2 编译器架构

黑板:应用中的多种不同数据处理逻辑相互影响和协同来完成数据分析处理。就好像多位不同的专家在同一黑板上交流思想,每个专家都可以获得别的专家写在黑板上的信息,同时也可以用自己的分析去更新黑板上的信息,从而影响其它专家。

      在实际应用中常见的实现模式有: 

      A 利用数据库: 利用数据库充当黑板,不同的应用共享数据库中信息,并且可以更新数据信息。这也是最常见的实现方式。

      特点:

      1 便于实现信息的查询,筛选和统计,这方面关系数据库提供了SQL 92的强大支持。

      2 不能用于较高实时性要求的环境,这种实现是工作在“拉模式”下的,并且高频率的访问数据库会导致严重的系统性能问题。

      B 利用发布—订阅模式:这种实现方式通常采用消息队列作为黑板,队列工作在主题模式(Topic),专家作为队列的订阅者,同时可以向队列发送消息,消息会被发送至所有订阅者。以上过程实现了专家间的信息交流。

      特点:

      1 可以有效应用于实时性要求较高的系统,这种实现工作在“推模式”下。

      2 难于实现信息的统计分析,不像实现方式一那样可以通过SQL支持,这些工作必须开发者自己完成。

代理者 :现今未找到详细说明,笔者日后到英文网站查找后再更新。

MVC :采用该模式的软件会包含这样三种组件:Model、View、Controller。

                                          图3 基于J2EE平台的MVC

PAC : 现今未找到详细说明,笔者日后到英文网站查找后再更新。

微内核 :微内核模式能适用于需求经常变更的系统,它把最小化的基本服务内核从扩展服务和客户特殊服务中分离出来。微内核服务与这些扩展的接口和协调它们之间的合作。(The Microkernel architectural pattern applies to software systems that must be able to adapt to changing system requirements. It separates a minimal functional core from extended functionality and customer-specific parts. The microkernel also serves as a socket for plugging in these extensions and coordinating their collaboration.)

优点:

            1.可扩展性。微内核所有附加功能均能通过开发新的附加服务的形式进行扩充。而且,它提供了封装底层功能的更易用的虚拟机,附加服务的开发可以在较高层次上开始。

            2.可移植性。附加功能只依赖于微内核,它们没有移植性的开销。只需修改微内核的一直线管部分即可。

            3.延长软件系统的生命周期。微内核架构可以接纳一些当前不可预见的新技术,以及商业层面的新功能的挑战。

缺点:

            1.设计和实现的复杂性。微内核提供的能力必须少而精,但又必须完备,否则就不能提供逍遥的完整“机制” 。

            2.微内核架构往往比同类情况下的其他设计性能低,要解决此问题得依靠良好的策略。

      微内核适用于开发难度大、预期生存周期长、成本高的软件系统,通过改架构可以很好的解决这三个问题:

            1.微内核将底层差异进行封装,构建了一个抽象度更高的虚拟机,降低了其他服务开发的难度。

            2.生存周期长,需要应对的变化越多。微内核架构屏蔽了下层变化,为上层服务提供了更稳定的抽象服务,理喻大规模扩展的需要。

            3同股沟开放性可以缓解成本高的问题。将微内核实现的基础服务开房,可以吸引大批开发者增强你的产品。.

      以下给出一个微内核的示例,它来自于CMU- Carnegie-Mellon大学开发的Hydra操作系统。(Below is illustrative example of Mickrokernel architecture from Hydra Operating System. Which is developed by CMU- Carnegie-Mellon University.)

                                                                                     图4

      微软下一代实验性操作系统在搜索方面(Singularity)引入了微内核的概念(Microsoft’s next generation experimental operating system in research code name ‘Singularity’ has adopting concept of ‘Microkernel’ )。下面给出示例图

                                                                   图6

基于元模型:基于元模型的架构和微内核架构一样,都是以适应变化、支持长生命周期为主要目标的架构模式,它包含两个层:基本层和元层,如下图所示。

                                                                图7

      基本层定义应用,元层通过元对象Meta A调用对象A,接触了应用对对象A的依赖。元层包含一组“元对象”,这些元对象组成的模型叫做“元模型”,元模型是对基本层中“一切”的抽象。元模型提供了软件本身的结构和行为的“自描述”。一般而言,元模型中的元对象应分别从三个方面刻画基本层:结构、行为、状态。

      由于本人知识有限,此文也只是对常用架构模式的浅层次归纳,更多内容在以后的学习过程中笔者会不定时更新,希望这些对大家有帮助,同时也欢迎大家留言探讨,指正不足之处。

参考文献:《软件架构设计》——电子工业出版社,冷酷的铃铛——ISBN 978-7-121-03946-1

                 http://viralpatel.NET/blogs/2009/08/microkernel-architecture-pattern-apply-software-systems.html




推荐阅读
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • 本文详细探讨了几种常用的Java后端开发框架组合及其具体应用场景。通过对比分析Spring Boot、MyBatis、Hibernate等框架的特点和优势,结合实际项目需求,为开发者提供了选择合适框架组合的参考依据。同时,文章还介绍了这些框架在微服务架构中的应用,帮助读者更好地理解和运用这些技术。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • ECharts 官方提供了丰富的图表示例,但实际项目中往往需要从后端动态获取数据。本文将详细介绍如何从后端获取数据并将其转换为 ECharts 所需的 JSON 格式,以实现动态饼图的展示。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • Ext JS MVC系列一:环境搭建与框架概览
    本文主要介绍了如何在项目中使用Ext JS 4作为前端框架,并详细讲解了Ext JS 4的MVC开发模式。文章将从项目目录结构、相关CSS和JS文件的引用以及MVC框架的整体认识三个方面进行总结。 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
  • Python ATM与购物车项目实战:深入解析三层架构设计
    本文详细解析了Python ATM与购物车项目的三层架构设计,重点介绍了MVC(Model-View-Controller)模式的应用。在用户界面层,系统通过图形化界面与用户进行交互,接收并处理用户的输入数据,随后将这些数据传递给控制层进行进一步处理。该层不仅负责展示信息,还承担了用户请求的初步处理任务。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • 如何有效防御网站中的SQL注入攻击
    本期文章将深入探讨网站如何有效防御SQL注入攻击。我们将从技术层面详细解析防范措施,并结合实际案例进行阐述,旨在帮助读者全面了解并掌握有效的防护策略。希望本文能为您的网络安全提供有益参考。 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • PHP自学必备:从零开始的准备工作与工具选择 ... [详细]
author-avatar
UP7家族--婵婵_172
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有