软件架构基本概念
软件架构通常被描述为组织或系统的结构,而系统是一个完成特定功能或功能集合的组件集合。换句话说,架构的重点是组织组件以支持特定功能。这种功能的组织被称为将组件分组以纳入到关注领域。
为什么我们需要架构?
像任何其他复杂的结构一样,软件必须建立在坚实的基础。没有考虑关键情景,没有为共同的问题做设计,或没有充分意识到关键决定带来的长期后果,都可以使你的应用程序处于危险之中。现代的工具和平台有助于简化应用程序的构建任务,但它们并没有取代根据您的具体情况设计应用程序的需求。拙劣的架构暴露的风险包括软件是不稳定的,不能支持业务需求,或者部署到生产环境时,应用程序甚至可能无法工作。
构思软件架构时,考虑下面的高层次的关注:
>应用程序会怎样部署到生产环境?
>用户将如何使用该应用程序?
>质量属性要求是什么,例如安全性,性能,并发性,国际化和配置?
>架构的趋势是什么,是现在还是部署后,可能影响应用程序?
架构的目标
应用程序架构寻求在业务需求和技术需求之间构建一个梁,通过理解用例,然后想方设法在软件中实现这些用例。架构的目标是确定影响应用程序结构的需求。良好的架构通过构建一个技术解决方案降低业务风险。优秀的设计具有足够的灵活性,以便能够处理,随着时间的流逝,将发生在硬件和软件技术,以及用户场景和需求上的自然的变化。架构师必须考虑设计决策,质量属性之间的内在权衡(如性能和安全性),以及需要讨论用户,系统和业务需求的权衡的全部影响。
记住,架构应该:
>暴露系统的结构,但隐藏实现的细节。
>实现所有的用例场景。
>尝试解决各种各样的利益相关者的关注问题。
>既处理功能需求,也处理质量需求。
架构方法
有任何架构必须解决的关键决策,不管架构方法。至少,你必须确定您正在构建的应用程序类型,将要使用的架构风格,以及你将如何处理横切关注点(cross-cutting concerns)。本指南中,我们为框架使用了架构基准,通过必须在架构中处理的不同领域。架构基准显示在下面的图表。
除了架构基准之外,可以使用下面的方法来帮助确定您的体系结构。第一步是确定你计划构建的应用程序类型。接下来,您必须了解应用程序将被怎样部署。一旦你知道您正在构建的应用程序是什么类型,和如何部署,你可以开始往下考虑架构,以便确定您将使用的风格和技术。最后,你必须考虑如何将质量属性和横切关注点(cross-cutting concerns)纳入您的系统设计。
横切关注点表示设计中的关键领域,它不关联于应用程序中某一个具体的层。例如,您可能希望在表示层,业务层和数据访问层缓存数据。关键的横切关注点: 认证,授权,缓存,通信,异常管理,检测和日志。
设计架构
创建一个灵活的架构设计,考虑以下问题:
>什么是架构的基础部分,如果它们出错了,就代表着最大的风险?
>架构的哪部分,最有可能发生变化,或哪部分的设计,可以推迟到后来有很小的影响再处理?
>什么是您的主要假设,以及你将如何测试它们?
>哪些条件可能需要你重构设计?
关键架构原则
设计架构时,考虑以下主要原则:
>持续改变。只要有可能,设计应用程序使它可以随时间发生改变以处理新的需求和挑战。
>分析模型并减少风险。使用威胁模型来理解风险和脆弱点。在适当情况下,使用设计工具和建模系统,如统一建模语言(UML)。
>模型和视图是沟通和协作工具。设计原则和设计变更的有效的沟通对好架构是至关重要的。使用模型和其他可视化的工具有效的沟通设计,使设计变更快速沟通。
>确定关键工程决策.使用本指南中的架构框架,理解关键工程决策和最常出现错误的领域。在第一时间获得这些关键决策,使该设计更为灵活,并不太可能被变化破坏。
- 大小: 31.5 KB
分享到:
相关推荐
JAWS:高性能Web服务器构架 08-06-13 ACE应用-第3章 应用模式语言开发可扩展ORB中间件 08-05-06 编程精粹 - 多年前的笔记 08-05-06 Windows2000 服务器端应用程序开发设计指南-目录 08-05-06 Win2000服务器端应用...
BlackBerry应用程序开发者指南第二卷是一本专为那些希望在BlackBerry平台上构建和发布应用程序的开发者设计的详尽参考资料。这份指南深入介绍了BlackBerry API的使用,涵盖了从基础概念到高级特性的广泛内容,旨在...
第一章autolisp主角潇洒登场 第二章autolisp的关键、基本结构与语法 第三章快速分类浏览autolisp功能函数 第四章新手上路(一)——万丈高楼平地起 第五章新手上路(二)——参数设计关键技巧 第六章对象属性的取得与活...
ExtJS是一种基于JavaScript的开源富客户端框架,专用于构建交互式和桌面级的Web应用程序。在《ExtJS Web应用程序开发指南(第2版)》中,开发者可以深入了解如何利用这个强大的框架来创建功能丰富的Web应用。这本书...
根据提供的文档信息,我们可以归纳出一系列与EL9800应用程序相关的知识点,这些知识点主要围绕着EL9800的应用程序指南、安装设置以及注意事项展开。 ### 一、EL9800概述 #### 1.1 标题解读 **EL9800应用程序指南**...
第一章autolisp主角潇洒登场 第二章autolisp的关键、基本结构与语法 第三章快速分类浏览autolisp功能函数 第四章新手上路(一)——万丈高楼平地起 第五章新手上路(二)——参数设计关键技巧 第六章对象属性的取得与活...
第1篇(第1~10章)为autollsp程序设计基础篇,主要介绍了autollsp的基本结构、语法、功能函数、对象属性、循环、判断式、子程序、选择集、符号表、读文件以及写文件等autolisp程序设计的相关知识与技巧。第2篇(第11章...
第一章autolisp主角潇洒登场 第二章autolisp的关键、基本结构与语法 第三章快速分类浏览autolisp功能函数 第四章新手上路(一)——万丈高楼平地起 第五章新手上路(二)——参数设计关键技巧 第六章对象属性的取得与活...
《Extjs Web应用程序开发指南》是一本专注于使用Extjs框架进行Web应用开发的专业书籍,而提供的压缩包文件包含了书中各个章节的源代码示例。这些示例代码是学习Extjs框架的重要参考资料,可以帮助读者深入理解Extjs...
第一章 高质量软件开发之道 第二章 做好程序员 第三章 编程语言发展简史 第四章 C++面向对象程序设计方法概述 第二部分 C++/C编程规范 第五章 文件结构 第六章 程序的版式 第七章 命名规则 第八章 表达式与基本语句 ...
首先,书中通过“第一章 网络驱动程序设计指南的向导”引导读者进入这个复杂但至关重要的领域。接着,第二章“内核模式驱动程序的网络结构”是关键章节,它将Windows 2000的网络结构与开放系统互连(OSI)模型相结合...
第一部分介绍Linux GUI编程架构以及编程基础知识,第二部分介绍Linux 编程常用C语言函数库glibc、构件库Gtk+、Gnome,第三部分介绍Linux下的GUI生成器Glade,第四部分介绍Linux编程调试工具gdb及xxgdb。第五部分包括...
第一部分介绍Linux GUI编程架构以及编程基础知识,第二部分介绍Linux 编程常用C语言函数库glibc、构件库Gtk+、Gnome,第三部分介绍Linux下的GUI生成器Glade,第四部分介绍Linux编程调试工具gdb及xxgdb。第五部分包括...
第一章介绍了NIC微端口驱动程序的类型和功能,如网络接口卡支持、微端口驱动程序代码的特点,以及与NDIS库的交互。第二章详细讲解了微端口驱动程序的操作,包括初始化、注册、发送数据、接收数据、状态指示等,并...
第一部分介绍Linux GUI编程架构以及编程基础知识,第二部分介绍Linux 编程常用C语言函数库glibc、构件库Gtk+、Gnome,第三部分介绍Linux下的GUI生成器Glade,第四部分介绍Linux编程调试工具gdb及xxgdb。第五部分包括...
学习Java的第一章通常会涵盖这些基础知识,为后续的面向对象编程、异常处理、集合框架、IO流、多线程、网络编程等进阶主题打下基础。Java还提供了丰富的库和框架,如Spring、Hibernate、MyBatis等,用于构建复杂的...
### Delphi.6应用开发指南-第一章(走进Delphi) #### Delphi简介 Delphi是一种强大的集成开发环境(IDE),特别适用于Windows平台的应用程序开发。它基于Object Pascal语言,结合了面向对象编程的优势,同时也...
4. **第二章:OPC DA架构和组件**:这一章可能会详细讲解OPC DA的基本架构,包括服务器、客户端、数据项、组等核心概念。还会介绍如何注册和管理OPC DA组件,以及COM组件的生命周期和事件模型。 5. **第三章:OPC ...