在描述软件体系结构之前,让我们看一下是否可以就什么是体系结构达成共识。 建筑的组成部分是什么,建筑具有什么价值。
体系结构提供了组件系统正常运行所需的结构和连接框架 。 体系结构是特定于上下文的,软件系统的良好体系结构与汽车或建筑物的体系结构不同。
一般而言,体系结构是不可见的 ,它存在于系统中,但在其他可见的设计组件下。 在讨论软件体系结构之前,最好使用物理对象描述体系结构。
建筑元素
体系结构涉及两个元素:
- 结构体
- 连接元素。
让我们看一下关于建筑物的这两个元素。
建筑物的结构涉及基础和为整个建筑物提供支撑的部分; 它是建筑物的骨架。 如果建筑物具有有趣的形状,那是因为在钢筋和混凝土框架的下方支撑了该形状。
连接元素可以是结构性的,但是它们提供了一种连接不同结构组件的方式,以便运输某些东西。 建筑物中的连接元素传输空气,水和电。
框架的结构能力将决定建筑物的高度。 一般而言,架构决定
大小 。 如果建筑物的钢筋和混凝土框架可以支撑10层结构,那么很难轻易在10层以上添加额外的楼层。 增加额外的楼层将需要花费更多的精力来增强建筑物的现有结构强度
如果缺少连接元素,则添加它会很昂贵。 例如,古老的砖混建筑通常不计划管道或用电。 如果此元素之后添加,则放置起来将更加昂贵。
如果之后添加管道,则您会看到管道在墙外运行。 如果建筑物的天气低于零,这可能会导致问题。
同样,在建筑物建造时未在建筑物中设计这些连接元件的建筑物中加电或空调也是不方便的。
为了进行比较,让我们在几个上下文中看一下体系结构:
| 宾语 | 结构组成 | 连接元素 |
|---|---|---|
| 建造 |
|
|
| 汽车 |
|
|
建筑与可见性
在上面的两个示例中,有关体系结构的几件事引人注目:
- 结构组件通常是隐藏的,除非它们起作用
- 最终对象掩盖了连接元素
因此,对于建筑物而言,钢框架的结构元素隐藏在饰面元素之下。 但在某些情况下,我们会看到混凝土或砖墙裸露。 结构元素通常没有吸引力,因此我们付出了额外的努力(即成本)来隐藏结构元素。 有时在混凝土或砖墙的情况下,我们会将它们暴露在外,因为视觉上没有必要隐藏这些元素,例如仓库。
连接元素几乎总是被隐藏。 电线,管道或HVAC管的外观在美学上并不令人满意,我们通常将这些元素隐藏起来。 如果我们要隐藏一个连接元素,则在第一次创建对象时将它们放入是最便宜的。
修复隐藏的连接元素的成本
修复隐藏的连接元素非常昂贵。 例如,根据接近连接元件的难易程度,将管道和电线固定在房屋中是昂贵的。
在此事实之后添加连接元素会变得更加昂贵且吸引力大大降低。 有一些砖砌的建筑物是在室内管道和电力可用之前建造的。 这些建筑的一个很好的例子是哈佛的住所或现在用作办公场所的旧砖仓库。 就哈佛住宅而言,水管在住宅外运行,并且由于波士顿的冬季天气,会结冰。 给砖仓库加电需要在墙壁内铺设金属导管。 由于它们暴露在外,因此容易发生水灾。
可见的结构元素
对于汽车来说,轮胎是一个结构元素,但它们暴露在外。 这就是为什么要努力使轮胎尽可能具有吸引力,例如白墙轮胎,装饰性轮毂盖等。
建筑目的
设置好体系结构后,它将确定两件事:
- 物体的大小
- 对象的功能
如前所述,建筑物的结构体系将决定其最大尺寸,而连接元素将概述其功能。 连接元素始终与功能有关。
结构体系结构的目的是将对象划分为独立的子组件,这些子组件可以单独设计。 例如,在一栋建筑物中,结构体系结构允许您随后分别设计每个公寓,而不必担心一个房间的设计如何影响另一个房间。
对于汽车,底盘的主要结构元素使您可以分别设计以下子组件:
- 发动机
- 门
- 灯
- 座位
通过允许单独设计子组件,我们可以细分问题(即“分而治之”),从而降低了总体设计的复杂性。 它允许独立的团队处理子组件。 良好的体系结构有助于子组件中强大的多态性。
在一个公寓里,每个公寓可以由不同的人设计不同的东西。 在汽车中,可以由一组人设计引擎,而不是设计汽车的门,灯或其他部分。
每个对象中的连接组件要么:1)提供可被多个组件访问的共享服务,要么2)提供子组件的协调以实现更高级别的功能。
电力,管道和HVAC都是可用于整个建筑物的共享服务的示例。 一个房间的用电量并不决定另一房间的用电量,但是,总的用电量取决于体系结构。
用于建筑物和转向柱的电梯以及汽车的气体系统是在对象的多个级别进行协调的组件示例。 当所有协调的子组件都在运行时,它们提供了总体功能。
通常,如果子组件之一不起作用,则整个协调对象集将无法起作用。 对于汽车,如果图中的任何组件发生故障,则引擎本身将发生故障。
摘要
在由多个子对象组成的任何对象中,都有体系结构。 架构提供了两个不同但相关的功能,即:
- 结构组件
- 连接元素
对象的体系结构决定了对象的大小,并确定了可以分别设计每个子组件的方式。
本文重点介绍物理对象,下一篇文章重点介绍软件体系结构 。
翻译自: https://www.javacodegeeks.com/2016/12/what-is-architecture.html