首页 > 其他分享 >2月10日总结

2月10日总结

时间:2024-02-16 23:45:59浏览次数:23  
标签:总结 10 逻辑 架构 表示层 业务 组件 化层

三章:分层架构

传统的IT团队结构按照技术领域进行组织,例如演示团队、后端开发团队和数据库团队等。由于大多数架构师、设计师和开发人员对这种结构非常熟悉,分层架构成为大多数商业应用程序开发项目的自然选择。然而,就像所有架构风格一样,它具有优点和缺点,并不适用于所有系统。

描述

在分层架构风格中,组件被组织成水平层,每个层在应用程序中扮演特定角色,例如展示逻辑、业务逻辑和持久化逻辑。尽管层数可能有所不同,但大多数分层架构由四个标准层组成:展示、业务、持久化和数据库(见图3-1)。在某些情况下,业务层和持久化层会合并为一个单一的业务层,特别是当将持久化逻辑(如SQL)嵌入到业务层组件中时。因此,在较小的应用程序中可能只有三个层,并且较大且更复杂的商业应用程序可能包含五个或更多的层。

Figure 3-1. The layered architecture style is a technically partitioned

architecture

分层架构风格的每一层在应用程序中都扮演着特定的角色和责任。例如,表示层负责处理用户界面和浏览器通信逻辑,而业务层则负责执行与请求相关的具体业务规则。架构中的每一层都形成了一个抽象概念,围绕满足特定业务请求所需完成的工作展开。例如,表示层无需关注如何获取客户数据;它只需要以特定格式将信息呈现在屏幕上。同样地,业务层不必关心如何将客户数据格式化为显示在屏幕上或者客户数据来自哪里;它只需要从持久化层获取数据,在数据上执行业务逻辑(比如计算值或聚合数据),并将结果传递给表示层。

通常,层次结构通过命名空间、包结构或目录结构来体现(取决于所使用的实现语言)。例如,在业务层中,客户功能可以表示为app.business.customer,而在展示层中,客户逻辑将表示为app.presentation.customer。在这个例子中,命名空间的第二个节点代表了层级,而第三个节点代表了领域组件。请注意,在所有层级上都重复出现的命名空间的第三个节点(customer)揭示了一种技术上分区的架构方式,在该架构下领域被分散到各个层级。

分层架构风格的一个强大特点是组件之间的关注点分离。特定层中的组件仅处理与该层相关的逻辑。例如,表示层中的组件专注于处理表示逻辑,而业务层中的组件则专注于处理业务逻辑。这种明确划分使得在体系结构中轻松构建有效角色和责任模型,并且当使用明确定义了各个层之间接口和契约时,使用此架构风格进行应用程序开发、测试、管理和维护也变得更加便捷。
关键概念

在这种架构风格中,层可以是开放的或封闭的。请注意图3-2中标记为封闭的每个层次。封闭的层意味着当请求从一个层次移动到另一个层次时,它必须通过下面的一层才能到达下面的下一层。例如,源自表示层的请求必须首先经过业务逻辑层,然后再经过持久化层最终到达数据库层。

那么为什么不允许表示层数直接访问持久化或数据库层数呢?毕竟,从表示曾直接访问数据库比通过一堆不必要的中间步骤来检索或保存数据库信息要快得多。对于这个问题的答案在于一个关键概念——隔离性分级。

隔离层概念意味着在架构的一个层次中进行的更改通常不会影响或干扰其他层次的组件。这种变化仅限于该层内部的组件,可能还包括与之关联的另一层(例如持久化层中包含SQL语句)。如果允许表示层直接访问持久化层,则对持久化层中SQL语句所做的更改将同时影响业务逻辑和表示层,从而导致应用程序具有高度耦合性和大量组件间相互依赖性。这种类型的架构则变得脆弱,并且很难且昂贵地进行修改。

Figure 3-2. With closed layers, the request must pass through that layer

隔离层概念指的是每个层都是相互独立的,因此对于架构中其他层的内部工作几乎没有或者完全没有了解。为了更好地理解这一概念的力量和重要性,可以考虑一个大型重构项目,将演示框架从angular.js转换为react.js。假设在演示层与业务层之间使用的合同(例如模型)保持不变,则业务层不会受到重构影响,并且仍然完全独立于所使用的用户界面框架类型。同样适用于持久化层:如果设计得当,在将关系数据库替换为NoSQL数据库时只会影响到持久化层,而不会对演示或业务层产生任何影响。

尽管封闭的层可以实现隔离层次,从而有助于在架构中隔离变化,但有时候某些层开放也是合理的。例如,假设您想向包含业务层内组件访问的共享服务功能(如数据和字符串工具类或审计和日志记录类)的架构添加一个共享服务层。在这种情况下,创建一个服务层通常是明智之举,因为它从架构上限制了对共享服务仅限于业务层(而不是展示层)。如果没有单独一层,则无法在架构上限制展示逻辑访问这些公共服务,使得管理此访问限制变得困难。

在共享服务层示例中,该层可能位于业务逻辑之下以表示该服务只能被业务逻辑所访问。然而,在这里存在一个问题:业务逻辑不应该需要通过服务护盾才能到达持久性存储区域。这是分布式系统设计中经典的问题,并且可以通过创建开放式护盾来解决。

如图3-3所示,在本例中,由于服务模块是开放式的,因此可以绕过它并直接到达持久性存储模块,这样做是合理的。

标签:总结,10,逻辑,架构,表示层,业务,组件,化层
From: https://www.cnblogs.com/lmyy/p/18017646

相关文章

  • 2月9日总结
    C#实现刘谦春晚魔术internalclassProgram{staticList<string>list=newList<string>(){"A","B","C","D","A","B","C","D"};staticstringhiddenEle1=string.Emp......
  • 2月13日总结
    四)---大鱼吃小鱼(互吃升级)鸿蒙开发游戏(五)---大鱼吃小鱼(添加音效)鸿蒙开发游戏(六)---大鱼吃小鱼(称霸海洋)前两篇文章我们做了摇杆控制小鱼移动,这篇将会添加一个NPC,让其自动在海洋里游荡,然后玩家控制吃掉它。在这之前我们想思考一些问题,NPC如何生成?NPC有哪些属性?NPC是如何控制的?如何......
  • 2月12日总结
    文|JamesMontemagno翻译|郑子铭VisualStudio2022在2023年发布了许多令人难以置信的功能,为.NET开发人员提供了大量新工具来提高他们的工作效率。有这么多可供选择,我精心挑选了一个包括编辑器改进、生产力更新和人工智能辅助的选项。让我们来探讨一些最有影响力的功能......
  • 2月16日总结
    exColor作为示例,可能过于简单这里再补充一个ini解析的示例由于实在写不动用其他库解析ini了,春节都要过完了,累了,写不动了,所以随意找了一份解析ini的库,仅供参考,对比不准确,毕竟完整库包含了更多功能先看看结果BenchmarkDotNetv0.13.12,Windows11(10.0.22631.3085/23......
  • 2月15日总结
    问题前,不妨先问大家几个问题:为什么我们需要操作系统?操作系统的出现解决了什么问题?为什么我们的电脑软件需要运行在诸如Win、Linux、MacOS等操作系统之上?我一直主张在学一门技术之前,最好提前能搞清楚诸如这些what、why、how的东西,这比一味埋头扎进知识库去硬着头皮学某知识点,更重......
  • 2月14日总结
    es_to_long(flag)^pprint(f'enc={enc}')print(f'a={a}')print(f'bag={bag}')"""enc=871114172567853490297478570113449366988793760172844644007566824913350088148162949968812541218339a=[3245882327,3130355629,243......
  • Codeforces Round 926 (Div. 2) 总结
    A题意:给出一个数组,让你重新排序,\(\sum_{i=1}^{n-1}a_i-a_{i+1}\)最大。做法:显然从小到大排序即可,答案就是最大值减去最小值。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1e6+5,MOD=998244353;signedmain(){ios::sync_with_s......
  • P1088 [NOIP2004 普及组] 火星人
    [NOIP2004普及组]火星人题目描述人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小......
  • 《程序是怎样跑起来的》总结一二三四章
    一:物理层面:CPU由具有开关功能的晶体管构成逻辑层面:内部由、寄存器,控制器,运算器,时钟四个部分构成,各部分通过电信号相互连通程序启动后,根据时钟信号,控制器会从内存中读取指令与数据,通过对这些指令进行解释执行,运算器对数据进行运算,控制器根据运算结果来控制计算机控制器:负责......
  • 初中英语优秀范文100篇-082I want to volunteer in a nursing home-我想在养老院做志
    PDF格式公众号回复关键字:SHCZFW082记忆树1Haveyoueverbeenavolunteerbefore?翻译你以前做过志愿者吗?简化记忆做过句子结构整个句子是一个疑问句,因为它以助动词“have”开头,并且句子的结尾是问号。主语you-句子的主语是人称代词助动词Have-现在完成时......