4+1视图是描述应用程序架构的绝佳方式 。每一个视图都描述了架构的一个重要侧面 。场景把视图中的元素如何协作串联在一起 。现在我们来看看为什么架构是如此重要 。
为什么架构如此重要
应用程序有两个层面的需求 。第一类是功能性需求 , 这些需求决定一个应用程序做什么 。这些通常都包含在用例(use case)或者用户故事(user story)中 。应用的架构其实跟这些功能性需求没什么关系 。功能性需求可以通过任意的架构来实现 , 甚至是非常糟糕的大泥球架构 。
文章插图
【JD架构师分享:微服务架构到底是什么东西】架构的重要性在于 , 它帮助应用程序满足了第二类需求:非功能性需求 。我们把这类需求也称之为质量属性需求 , 或者简称为“能力” 。这些非功能性需求决定一个应用程序在运行时的质量 , 比如可扩展性和可靠性 。它们也决定了开发阶段的质量 , 包括可维护性、可测试性、可扩展性和可部署性 。为应用程序所选择的架构将决定这些质量属性 。
2什么是架构的风格
在物理世界中 , 建筑物的建筑通常遵循特定的风格 , 例如维多利亚式、美国工匠式或装饰艺术式 。每种风格都是一系列设计决策 , 限制了建筑的特征和建筑材料 。建筑风格的概念也适用于软件 。David Garlan和Mary Shaw这两位软件架构学科的先驱定义了如下架构风格:
因此 , 架构风格根据结构组织模式定义了一系列此类系统 。更具体地说 , 架构风格确定可以在该风格的实例中使用的组件和连接器的词汇表 , 以及关于如何组合它们的一组约束 。
特定的架构风格提供了有限的元素(组件)和关系(连接器) , 你可以从中定义应用程序架构的视图 。应用程序通常使用多种架构风格的组合 。例如 , 在本节的后面 , 我将描述单体架构是如何将实现视图构造为单个(可执行与可部署)组件的架构样式 。微服务架构将应用程序构造为一组松散耦合的服务 。
分层式架构风格
架构的典型例子是分层架构 。分层架构将软件元素按“层”的方式组织 。每个层都有明确定义的职责 。分层架构还限制了层之间的依赖关系 。每一层只能依赖于紧邻其下方的层(如果严格分层)或其下面的任何层 。
可以将分层架构应用于前面讨论的四个视图中的任何一个 。流行的三层架构是应用于逻辑视图的分层架构 。它将应用程序的类组织到以下层中:
- 表现层:包含实现用户界面或外部API的代码 。
- 业务逻辑层:包含业务逻辑 。
- 数据持久化层:实现与数据库交互的逻辑 。
- 单个表现层:它无法展现应用程序可能不仅仅由单个系统调用的事实 。
- 单一数据持久化层:它无法展现应用程序可能与多个数据库进行交互的事实 。
- 将业务逻辑层定义为依赖于数据持久化层:理论上 , 这样的依赖性会妨碍你在没有数据库的情况下测试业务逻辑 。
让我们看一下克服这些弊端的替代架构:六边形架构 。
关于架构风格的六边形
六边形架构是分层架构风格的替代品 。如图2-2所示 , 六边形架构风格选择以业务逻辑为中心的方式组织逻辑视图 。应用程序具有一个或多个入站适配器 , 而不是表示层 , 它通过调用业务逻辑来处理来自外部的请求 。同样 , 应用程序具有一个或多个出站适配器 , 而不是数据持久化层 , 这些出站适配器由业务逻辑调用并调用外部应用程序 。此架构的一个关键特性和优点是业务逻辑不依赖于适配器 。相反 , 各种适配器都依赖业务逻辑 。
文章插图
图2六边形架构的一个示例 , 它由业务逻辑和一个或多个与外部系统通信的适配器组成 。业务逻辑具有一个或多个端口 。处理来自外部系统请求的入站适配器调用入站端口 。出站适配器实现出站端口 , 并调用外部系统
推荐阅读
- 十几年linux运维工程师的工作经验分享
- 现在程序员最火的微服务架构与SpringCloud,你真的弄清楚了吗?
- 春夏穿搭|韩国oni春季穿着分享
- 清明节气如何养生,分享五个小常识
- 我喜欢你很久了的说说 分享你最喜欢的一句话
- 自由职业者|工作10年,历经制造业和互联网行业,分享以下4点总结和感悟!
- 紫砂陶艺历代师承情况
- 八个月宝宝头发发黄怎么办
- 天蝎座|网友分享纯物理减肥法,感觉很厉害的样子,你觉得这样可行吗?
- 设计师必备的印刷常识